#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct node {
int data;
struct node* next;
};
struct node *sorted_insert(struct node *ptr, int data){
struct node
*newNode
= malloc(sizeof(struct node
)); if (!newNode){
printf("something went wrong using malloc"); return NULL;
}
newNode->data = data;
if(ptr->next == NULL){//dummy node
newNode -> next = ptr;
return newNode;
} else {
if(ptr->next->next == NULL){//one node
if(ptr->data < data){
newNode->next = ptr;
return newNode;
} else {
newNode->next = ptr->next;
ptr->next = newNode;
return ptr;
}
} else {
struct node *prev = NULL;
struct node *current = ptr;
while(current->next != NULL && current->data > data) {
prev = current;
current = current->next;
}
newNode->next = current;
if(prev){
prev->next = newNode;
} else {
ptr = newNode;
}
return ptr;
}
}
}
void print(struct node* root){
struct node* trav = root;
while(trav->next != NULL){
trav = trav -> next;
}
}
int main(void){
struct node *head = NULL;
head
= malloc(sizeof(struct node
)); if (!head){
printf("something went wrong using malloc"); return -1;
}
head -> data = -1;
head -> next = NULL;
for(int i = 0; i < 20; i++) {
head = sorted_insert(head, data);
}
//printf("number of elements %d\n", length(head));
print(head);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCnN0cnVjdCBub2RlIHsKCWludCBkYXRhOwoJc3RydWN0IG5vZGUqIG5leHQ7Cn07CgpzdHJ1Y3Qgbm9kZSAqc29ydGVkX2luc2VydChzdHJ1Y3Qgbm9kZSAqcHRyLCBpbnQgZGF0YSl7CglzdHJ1Y3Qgbm9kZSAqbmV3Tm9kZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCWlmICghbmV3Tm9kZSl7CgkJcHJpbnRmKCJzb21ldGhpbmcgd2VudCB3cm9uZyB1c2luZyBtYWxsb2MiKTsKCQlyZXR1cm4gTlVMTDsKCX0KCW5ld05vZGUtPmRhdGEgPSBkYXRhOwoKCWlmKHB0ci0+bmV4dCA9PSBOVUxMKXsvL2R1bW15IG5vZGUKCQluZXdOb2RlIC0+IG5leHQgPSBwdHI7CgkJcmV0dXJuIG5ld05vZGU7Cgl9IGVsc2UgewoJCWlmKHB0ci0+bmV4dC0+bmV4dCA9PSBOVUxMKXsvL29uZSBub2RlCgkJCWlmKHB0ci0+ZGF0YSA8IGRhdGEpewoJCQkJbmV3Tm9kZS0+bmV4dCA9IHB0cjsKCQkJCXJldHVybiBuZXdOb2RlOwoJCQl9IGVsc2UgewoJCQkJbmV3Tm9kZS0+bmV4dCA9IHB0ci0+bmV4dDsKCQkJCXB0ci0+bmV4dCA9IG5ld05vZGU7CgkJCQlyZXR1cm4gcHRyOwoJCQl9CgkJfSBlbHNlIHsKCQkJc3RydWN0IG5vZGUgKnByZXYgPSBOVUxMOwoJCQlzdHJ1Y3Qgbm9kZSAqY3VycmVudCA9IHB0cjsKCQkJd2hpbGUoY3VycmVudC0+bmV4dCAhPSBOVUxMICYmIGN1cnJlbnQtPmRhdGEgPiBkYXRhKSB7CgkJCQlwcmV2ID0gY3VycmVudDsKCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwoJCQl9CgkJCW5ld05vZGUtPm5leHQgPSBjdXJyZW50OwoJCQlpZihwcmV2KXsKCQkJCXByZXYtPm5leHQgPSBuZXdOb2RlOwoJCQl9IGVsc2UgewoJCQkJcHRyID0gbmV3Tm9kZTsKCQkJfQoJCQlyZXR1cm4gcHRyOwoJCX0KCX0KfQoKdm9pZCBwcmludChzdHJ1Y3Qgbm9kZSogcm9vdCl7CiAgc3RydWN0IG5vZGUqIHRyYXYgPSByb290OwogIHdoaWxlKHRyYXYtPm5leHQgIT0gTlVMTCl7CiAgICBwcmludGYoIiVkXG4iLCB0cmF2IC0+IGRhdGEpOwogICAgdHJhdiA9IHRyYXYgLT4gbmV4dDsKICB9Cn0KCmludCBtYWluKHZvaWQpewoJc3RydWN0IG5vZGUgKmhlYWQgPSBOVUxMOwoJaGVhZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCWlmICghaGVhZCl7CgkJcHJpbnRmKCJzb21ldGhpbmcgd2VudCB3cm9uZyB1c2luZyBtYWxsb2MiKTsKCQlyZXR1cm4gLTE7Cgl9CgoJaGVhZCAtPiBkYXRhID0gLTE7CgloZWFkIC0+IG5leHQgPSBOVUxMOwoKCXNyYW5kKHRpbWUoTlVMTCkpOwoJZm9yKGludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKCQlpbnQgZGF0YSA9IHJhbmQoKSUyMDAwOwoJCXByaW50ZigiJWQgIiwgZGF0YSk7CgkJaGVhZCA9IHNvcnRlZF9pbnNlcnQoaGVhZCwgZGF0YSk7Cgl9CglwdXRzKCIiKTsKCQoJLy9wcmludGYoIm51bWJlciBvZiBlbGVtZW50cyAlZFxuIiwgbGVuZ3RoKGhlYWQpKTsKCXByaW50KGhlYWQpOwp9