#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node * next;
} ;
struct node * head = NULL;
void appendNode( int data)
{
struct node
* newnode
= ( struct node
* ) malloc ( sizeof ( struct node
) ) ; newnode-> data = data;
newnode-> next = NULL;
if ( head == NULL)
head = newnode;
else
{
struct node * temp = head;
while ( temp-> next)
temp = temp-> next;
temp-> next = newnode;
}
}
void displayNodes( )
{
struct node * temp = head;
if ( temp)
{
while ( temp)
{
temp = temp-> next;
}
}
}
//REVERSING THE LINKEDLIST BY RECURSION
void reverseListByRecursion( struct node * currNode)
{
if ( currNode== NULL)
return ;
else
{
reverseListByRecursion( currNode-> next) ;
printf ( "%d->" , currNode
-> data
) ; }
}
//REVERSING THE LINKEDLIST BY USING POINTERS
void reverseListByPointers( )
{
struct node * p = head,
* q = NULL,
* r;
while ( p!= NULL)
{
r = q;
q = p;
p = p-> next;
q-> next = r;
}
head = q;
}
void findMidNode( )
{
struct node * p= head,* q= p-> next;
if ( p== NULL)
{
printf ( "\n \n Linked List is empty!!!" ) ; return ;
}
else if ( q== NULL)
{
printf ( "\n \n Mid node is: %d" , p
-> data
) ; return ;
}
else
{
while ( q!= NULL)
{
p = p-> next;
q = q-> next-> next;
}
printf ( "\n \n Mid node is: %d" , p
-> data
) ; }
}
int main( )
{
appendNode( 123 ) ;
appendNode( 234 ) ;
appendNode( 345 ) ;
printf ( "\n \n Actual LinkedList\n " ) ; displayNodes( ) ;
//REVERSING THE LINKEDLIST BY RECURSION
printf ( "\n \n Reversed LL by recursion\n " ) ; reverseListByRecursion( head) ;
//REVERSING THE LINKEDLIST BY USING POINTERS
reverseListByPointers( ) ;
printf ( "\n \n Reversed LL by pointers\n " ) ; displayNodes( ) ;
findMidNode( ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBub2RlCnsKCWludCBkYXRhOwoJc3RydWN0IG5vZGUgKm5leHQ7Cn07CgpzdHJ1Y3Qgbm9kZSAqaGVhZCA9IE5VTEw7Cgp2b2lkIGFwcGVuZE5vZGUoaW50IGRhdGEpCnsKCXN0cnVjdCBub2RlICpuZXdub2RlID0gKHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbmV3bm9kZS0+ZGF0YSA9IGRhdGE7CgluZXdub2RlLT5uZXh0ID0gTlVMTDsKCglpZihoZWFkID09IE5VTEwpCgkJaGVhZCA9IG5ld25vZGU7CgllbHNlCgl7CgkJc3RydWN0IG5vZGUgKnRlbXAgPSBoZWFkOwoJCXdoaWxlKHRlbXAtPm5leHQpCgkJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJCXRlbXAtPm5leHQgPSBuZXdub2RlOwoJfQp9Cgp2b2lkIGRpc3BsYXlOb2RlcygpCnsKCXN0cnVjdCBub2RlICp0ZW1wID0gaGVhZDsKCglwcmludGYoIkhFQUQtPiIpOwoJaWYodGVtcCkKICAgICAgICB7CgkJd2hpbGUodGVtcCkKICAgICAgICAgICAgICAgIHsKCQkJcHJpbnRmKCIlZC0+Iix0ZW1wLT5kYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoJcHJpbnRmKCJOVUxMIik7Cn0KCi8vUkVWRVJTSU5HIFRIRSBMSU5LRURMSVNUIEJZIFJFQ1VSU0lPTgp2b2lkIHJldmVyc2VMaXN0QnlSZWN1cnNpb24oc3RydWN0IG5vZGUgKmN1cnJOb2RlKQp7CglpZihjdXJyTm9kZT09TlVMTCkKCQlyZXR1cm47CgllbHNlCgl7CgkJcmV2ZXJzZUxpc3RCeVJlY3Vyc2lvbihjdXJyTm9kZS0+bmV4dCk7CgkJcHJpbnRmKCIlZC0+IixjdXJyTm9kZS0+ZGF0YSk7Cgl9Cn0KCi8vUkVWRVJTSU5HIFRIRSBMSU5LRURMSVNUIEJZIFVTSU5HIFBPSU5URVJTCnZvaWQgcmV2ZXJzZUxpc3RCeVBvaW50ZXJzKCkKewoJc3RydWN0IG5vZGUgKnAgPSBoZWFkLAoJCSAgICAqcSA9IE5VTEwsCgkJICAgICpyOwoKCXdoaWxlKHAhPU5VTEwpCgl7CgkJciA9IHE7CgkJcSA9IHA7CgkJcCA9IHAtPm5leHQ7CgkJcS0+bmV4dCA9IHI7Cgl9CgoJaGVhZCA9IHE7Cn0KCnZvaWQgZmluZE1pZE5vZGUoKQp7CglzdHJ1Y3Qgbm9kZSAqcD1oZWFkLCpxPXAtPm5leHQ7CgkKCWlmKHA9PU5VTEwpCgl7CgkJcHJpbnRmKCJcblxuTGlua2VkIExpc3QgaXMgZW1wdHkhISEiKTsKCQlyZXR1cm47Cgl9CgllbHNlIGlmKHE9PU5VTEwpCgl7CgkJcHJpbnRmKCJcblxuTWlkIG5vZGUgaXM6ICVkIixwLT5kYXRhICk7CgkJcmV0dXJuOwoJfQoJZWxzZQoJewoJCXdoaWxlKHEhPU5VTEwpCgkJewoJCQlwID0gcC0+bmV4dDsKCQkJcSA9IHEtPm5leHQtPm5leHQ7CgkJfQoJCXByaW50ZigiXG5cbk1pZCBub2RlIGlzOiAlZCIscC0+ZGF0YSk7Cgl9Cn0KCmludCBtYWluKCkKewoJYXBwZW5kTm9kZSgxMjMpOwoJYXBwZW5kTm9kZSgyMzQpOwoJYXBwZW5kTm9kZSgzNDUpOwoJcHJpbnRmKCJcblxuQWN0dWFsIExpbmtlZExpc3RcbiIpOwoJZGlzcGxheU5vZGVzKCk7CgogICAgLy9SRVZFUlNJTkcgVEhFIExJTktFRExJU1QgQlkgUkVDVVJTSU9OCglwcmludGYoIlxuXG5SZXZlcnNlZCBMTCBieSByZWN1cnNpb25cbiIpOwogICAgcHJpbnRmKCJIRUFELT4iKTsKCXJldmVyc2VMaXN0QnlSZWN1cnNpb24oaGVhZCk7CglwcmludGYoIk5VTEwiKTsKCiAgICAvL1JFVkVSU0lORyBUSEUgTElOS0VETElTVCBCWSBVU0lORyBQT0lOVEVSUwogICAgCglyZXZlcnNlTGlzdEJ5UG9pbnRlcnMoKTsKCXByaW50ZigiXG5cblJldmVyc2VkIExMIGJ5IHBvaW50ZXJzXG4iKTsKCWRpc3BsYXlOb2RlcygpOwoKZmluZE1pZE5vZGUoKTsKCQogICAgICAgIHJldHVybiAwOwp9