#include <stdio.h>
#include <stdlib.h>
typedef struct Node Node;
typedef union Data {
int value;
Node* node;
} Data;
struct Node {
Data data;
struct Node* next;
};
Node* group (int* array, int len)
{
Node
* head
= (Node
*) malloc(sizeof(Node
)); head
->data.
node = (Node
*) malloc(sizeof(Node
)); head->next = NULL;
Node* outer = head;
Node* curr = head->data.node;
curr->data.value = array[0];
curr->next = NULL;
int i;
int prev = array[0];
for(i = 1; i < len; i++) {
if(array[i] == prev) {
curr
->next
= (Node
*) malloc(sizeof(Node
)); curr = curr->next;
curr->data.value = array[i];
curr->next = NULL;
} else {
outer
->next
= (Node
*) malloc(sizeof(Node
)); outer = outer->next;
outer
->data.
node = (Node
*) malloc(sizeof(Node
)); curr = outer->data.node;
curr->data.value = array[i];
curr->next = NULL;
prev = array[i];
}
}
return head;
}
void print_int_list(Node* head)
{
Node* curr = head;
while(curr->next != NULL) {
printf("%d, ", curr
->data.
value); curr = curr->next;
}
printf("%d]", curr
->data.
value); }
void print_nested_list(Node* head)
{
Node* curr = head;
while(curr->next != NULL){
print_int_list(curr->data.node);
curr = curr->next;
}
print_int_list(head->data.node);
}
int main(void) {
int a[] = {1,1,1,2,2,1,2};
print_nested_list(group(a, 7));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IE5vZGUgTm9kZTsKCnR5cGVkZWYgdW5pb24gRGF0YSB7CglpbnQgdmFsdWU7CglOb2RlKiBub2RlOwp9IERhdGE7CgpzdHJ1Y3QgTm9kZSB7CglEYXRhIGRhdGE7CglzdHJ1Y3QgTm9kZSogbmV4dDsKfTsKCk5vZGUqIGdyb3VwIChpbnQqIGFycmF5LCBpbnQgbGVuKQp7CglOb2RlKiBoZWFkID0gKE5vZGUqKSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCWhlYWQtPmRhdGEubm9kZSA9IChOb2RlKikgbWFsbG9jKHNpemVvZihOb2RlKSk7CgloZWFkLT5uZXh0ID0gTlVMTDsKCU5vZGUqIG91dGVyID0gaGVhZDsKCU5vZGUqIGN1cnIgPSBoZWFkLT5kYXRhLm5vZGU7CgljdXJyLT5kYXRhLnZhbHVlID0gYXJyYXlbMF07CgljdXJyLT5uZXh0ID0gTlVMTDsKCQoJaW50IGk7CglpbnQgcHJldiA9IGFycmF5WzBdOwoJZm9yKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKCQlpZihhcnJheVtpXSA9PSBwcmV2KSB7CgkJCWN1cnItPm5leHQgPSAoTm9kZSopIG1hbGxvYyhzaXplb2YoTm9kZSkpOwoJCQljdXJyID0gY3Vyci0+bmV4dDsKCQkJY3Vyci0+ZGF0YS52YWx1ZSA9IGFycmF5W2ldOwoJCQljdXJyLT5uZXh0ID0gTlVMTDsKCQl9IGVsc2UgewoJCQlvdXRlci0+bmV4dCA9IChOb2RlKikgbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJCW91dGVyID0gb3V0ZXItPm5leHQ7CgkJCW91dGVyLT5kYXRhLm5vZGUgPSAoTm9kZSopIG1hbGxvYyhzaXplb2YoTm9kZSkpOwoJCQljdXJyID0gb3V0ZXItPmRhdGEubm9kZTsKCQkJY3Vyci0+ZGF0YS52YWx1ZSA9IGFycmF5W2ldOwoJCQljdXJyLT5uZXh0ID0gTlVMTDsKCQkJcHJldiA9IGFycmF5W2ldOwoJCX0KCX0KCglyZXR1cm4gaGVhZDsKfQoKdm9pZCBwcmludF9pbnRfbGlzdChOb2RlKiBoZWFkKQp7CglOb2RlKiBjdXJyID0gaGVhZDsKCXByaW50ZigiWyIpOwoJd2hpbGUoY3Vyci0+bmV4dCAhPSBOVUxMKSB7CgkJcHJpbnRmKCIlZCwgIiwgY3Vyci0+ZGF0YS52YWx1ZSk7CgkJY3VyciA9IGN1cnItPm5leHQ7Cgl9CglwcmludGYoIiVkXSIsIGN1cnItPmRhdGEudmFsdWUpOwp9Cgp2b2lkIHByaW50X25lc3RlZF9saXN0KE5vZGUqIGhlYWQpCnsKCU5vZGUqIGN1cnIgPSBoZWFkOwoJcHJpbnRmKCJbIik7Cgl3aGlsZShjdXJyLT5uZXh0ICE9IE5VTEwpewoJCXByaW50X2ludF9saXN0KGN1cnItPmRhdGEubm9kZSk7CgkJcHJpbnRmKCIsICIpOwoJCWN1cnIgPSBjdXJyLT5uZXh0OwoJfQoJcHJpbnRfaW50X2xpc3QoaGVhZC0+ZGF0YS5ub2RlKTsKCXByaW50ZigiXVxuIik7Cn0KCmludCBtYWluKHZvaWQpIHsKCQoJaW50IGFbXSA9IHsxLDEsMSwyLDIsMSwyfTsKCQoJcHJpbnRfbmVzdGVkX2xpc3QoZ3JvdXAoYSwgNykpOwoJCglyZXR1cm4gMDsKfQ==