#include<stdio.h>
struct node
{
int data;
struct node * next;
};
// implementing a function to copy a Linked List
struct node * copyList(struct node * head)
{
// creating a new variable as a list
struct node
* list2
= (struct node
*)malloc(sizeof(struct node
));
//creating a temporary variable to traverse the new list
struct node * temp = list2;
while(head)
{
// assigning value
temp -> data = head -> data;
// move to the next node
head = head -> next;
// if the next node exists
// we need to create a new memory space
if(head)
{
struct node
* temp2
= (struct node
*)malloc(sizeof(struct node
));
//point the next of the temp to this new location
temp -> next = temp2;
// move to the new location
temp = temp -> next;
}
else
{
// since there is no next node
// means end of the list
temp -> next = NULL;
}
}
//returning the pointer of the new list
return list2;
}
struct node * addElement(struct node *head, int number)
{
struct node
* temp
= (struct node
*)malloc(sizeof(struct node
)); temp -> data = number;
temp -> next = NULL;
struct node * temp2 = head;
while(temp2 -> next != NULL)
temp2 = temp2 -> next;
temp2 -> next = temp;
return head;
}
// a function to print the list
void printer(struct node * head)
{
while(head)
{
head = head -> next;
}
}
int main(void)
{
//creating a list
struct node
* listHead
= (struct node
*)malloc(sizeof(struct node
)); listHead->data = 1;
listHead->next = NULL;
listHead = addElement(listHead, 2);
listHead = addElement(listHead, 3);
listHead = addElement(listHead, 4);
printer(listHead);
struct node * copy_of_list = copyList(listHead);
// print the new list
printer(copy_of_list);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KCnN0cnVjdCBub2RlCnsKCWludCBkYXRhOwoJc3RydWN0IG5vZGUgKiBuZXh0Owp9OwoKLy8gaW1wbGVtZW50aW5nIGEgZnVuY3Rpb24gdG8gY29weSBhIExpbmtlZCBMaXN0CnN0cnVjdCBub2RlICogY29weUxpc3Qoc3RydWN0IG5vZGUgKiBoZWFkKQp7CgkvLyBjcmVhdGluZyBhIG5ldyB2YXJpYWJsZSBhcyBhIGxpc3QKCXN0cnVjdCBub2RlICogbGlzdDIgPSAoc3RydWN0IG5vZGUgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgkKCS8vY3JlYXRpbmcgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gdHJhdmVyc2UgdGhlIG5ldyBsaXN0CglzdHJ1Y3Qgbm9kZSAqIHRlbXAgPSBsaXN0MjsKCgl3aGlsZShoZWFkKQoJewoJCS8vIGFzc2lnbmluZyB2YWx1ZQoJCXRlbXAgLT4gZGF0YSA9IGhlYWQgLT4gZGF0YTsKCgkJLy8gbW92ZSB0byB0aGUgbmV4dCBub2RlCgkJaGVhZCA9IGhlYWQgLT4gbmV4dDsKCQkKCQkvLyBpZiB0aGUgbmV4dCBub2RlIGV4aXN0cwoJCS8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG1lbW9yeSBzcGFjZQoJCWlmKGhlYWQpCgkJewoJCQlzdHJ1Y3Qgbm9kZSAqIHRlbXAyID0gKHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJCQkKCQkJLy9wb2ludCB0aGUgbmV4dCBvZiB0aGUgdGVtcCB0byB0aGlzIG5ldyBsb2NhdGlvbgoJCQl0ZW1wIC0+IG5leHQgPSB0ZW1wMjsKCQkJCgkJCS8vIG1vdmUgdG8gdGhlIG5ldyBsb2NhdGlvbgoJCQl0ZW1wID0gdGVtcCAtPiBuZXh0OwoJCX0KCQllbHNlCgkJewoJCQkvLyBzaW5jZSB0aGVyZSBpcyBubyBuZXh0IG5vZGUKCQkJLy8gbWVhbnMgZW5kIG9mIHRoZSBsaXN0CgkJCXRlbXAgLT4gbmV4dCA9IE5VTEw7CgkJfQoJfQoKCS8vcmV0dXJuaW5nIHRoZSBwb2ludGVyIG9mIHRoZSBuZXcgbGlzdAoJcmV0dXJuIGxpc3QyOwp9CgpzdHJ1Y3Qgbm9kZSAqIGFkZEVsZW1lbnQoc3RydWN0IG5vZGUgKmhlYWQsIGludCBudW1iZXIpCnsKCXN0cnVjdCBub2RlICogdGVtcCA9IChzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJdGVtcCAtPiBkYXRhID0gbnVtYmVyOwoJdGVtcCAtPiBuZXh0ID0gTlVMTDsKCXN0cnVjdCBub2RlICogdGVtcDIgPSBoZWFkOwoJd2hpbGUodGVtcDIgLT4gbmV4dCAhPSBOVUxMKQoJCXRlbXAyID0gdGVtcDIgLT4gbmV4dDsKCXRlbXAyIC0+IG5leHQgPSB0ZW1wOwoJcmV0dXJuIGhlYWQ7Cn0KCi8vIGEgZnVuY3Rpb24gdG8gcHJpbnQgdGhlIGxpc3QKdm9pZCBwcmludGVyKHN0cnVjdCBub2RlICogaGVhZCkKewoJd2hpbGUoaGVhZCkKCXsKCQlwcmludGYoIiVkICIsaGVhZCAtPiBkYXRhKTsKCQloZWFkID0gaGVhZCAtPiBuZXh0OwoJfQp9CgppbnQgbWFpbih2b2lkKQp7CgkvL2NyZWF0aW5nIGEgbGlzdAoJc3RydWN0IG5vZGUgKiBsaXN0SGVhZCA9IChzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbGlzdEhlYWQtPmRhdGEgPSAxOwoJbGlzdEhlYWQtPm5leHQgPSBOVUxMOwoJbGlzdEhlYWQgPSBhZGRFbGVtZW50KGxpc3RIZWFkLCAyKTsKCWxpc3RIZWFkID0gYWRkRWxlbWVudChsaXN0SGVhZCwgMyk7CglsaXN0SGVhZCA9IGFkZEVsZW1lbnQobGlzdEhlYWQsIDQpOwoJCglwcmludGVyKGxpc3RIZWFkKTsKCglzdHJ1Y3Qgbm9kZSAqIGNvcHlfb2ZfbGlzdCA9IGNvcHlMaXN0KGxpc3RIZWFkKTsKCQoJLy8gcHJpbnQgdGhlIG5ldyBsaXN0CglwcmludGYoIlxuIik7CglwcmludGVyKGNvcHlfb2ZfbGlzdCk7CgoJcmV0dXJuIDA7Cn0=