Adrita

linked list

Mar 17th, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct node
  5. {
  6. int data;
  7. struct node *next;
  8. };
  9. typedef struct node Node;
  10. Node* head;
  11. Node* create_node(int item, Node *next)
  12. {
  13. Node* new_node=new Node();
  14. if(new_node==NULL)
  15. cout<<"Error"<<endl;
  16. else
  17. {
  18. new_node->data=item;
  19. new_node->next=next;
  20. }
  21. return new_node;
  22.  
  23. }
  24. Node* prepend(int item,Node* head)
  25. {
  26. Node* new_node=create_node(item,head);
  27. return new_node;
  28. }
  29. Node* append(int item,Node *head)
  30. {
  31. Node *new_node=create_node(item,NULL);
  32. if(head==NULL)
  33. return new_node;
  34. else
  35. {
  36. Node* current=new Node();
  37. current=head;
  38. while(current->next!=NULL)
  39. current=current->next;
  40. current->next=new_node;
  41. }
  42. return head;
  43. }
  44. Node* insertn(int item,Node* head,int key)
  45. {
  46. Node* new_node=create_node(item,NULL);
  47. if(head==NULL)
  48. cout<<"Error"<<endl;
  49. else
  50. {
  51. Node *current=new Node();
  52. current=head;
  53. while(current!=NULL&&current->data!=key)
  54. current=current->next;
  55. if(current!=NULL)
  56. {
  57. new_node->next=current->next;
  58. current->next=new_node;
  59. }
  60. else
  61. cout<<"Value not found"<<endl;
  62. }
  63. return head;
  64. }
  65. void display(Node *head)
  66. {
  67. cout<<"Linked list:"<<endl;
  68. while(head!=NULL)
  69. {
  70. cout<<head->data<<" ";
  71. head=head->next;
  72. }
  73. cout<<endl;
  74. }
  75. Node* remove_head(Node* head)
  76. {
  77. head=head->next;
  78. return head;
  79. }
  80. Node* remove_tail(Node* head)
  81. {
  82. Node *current=new Node();
  83. Node *prev=new Node();
  84. current=head;
  85. while(current->next!=NULL)
  86. {
  87. prev=current;
  88. current=current->next;
  89. }
  90. prev->next=NULL;
  91. return head;
  92. }
  93. Node* remove_value(Node* head,int key)
  94. {
  95. Node* temp=new Node();
  96. temp=head;
  97. Node* prev=new Node();
  98. if(temp!=NULL&&temp->data==key)
  99. {
  100. head=temp->next;
  101. return head;
  102. }
  103. while(temp!=NULL && temp->data!=key)
  104. {
  105. prev=temp;
  106. temp=temp->next;
  107. }
  108. if(temp==NULL)
  109. {
  110. cout<<"Value not present"<<endl;
  111. return head;
  112. }
  113. prev->next=temp->next;
  114. return head;
  115. }
  116. Node* reverse_list(Node* head)
  117. {
  118. Node* prev=NULL;
  119. Node* current=head;
  120. while(current!=NULL)
  121. {
  122. Node* temp=current->next;
  123. current->next=prev;
  124. prev=current;
  125. current=temp;
  126. }
  127. head=prev;
  128. return head;
  129. }
  130. void print(Node*head)
  131. {
  132. if(head==NULL)
  133. return;
  134. cout<<head->data<<" ";
  135. print(head->next);
  136. }
  137. void print_reverse(Node*head)
  138. {
  139. if(head==NULL)
  140. return;
  141. print_reverse(head->next);
  142. cout<<head->data<<" ";
  143. }
  144. void reverse_rec(Node* p)
  145. {
  146. if(p->next==NULL)
  147. {
  148. head=p;
  149. return;
  150. }
  151. reverse_rec(p->next);
  152. Node* q=p->next;
  153. q->next=p;
  154. p->next=NULL;
  155. }
  156. int main()
  157. {
  158. head=NULL;
  159. head=prepend(10,head);
  160. head=insertn(20,head,10);
  161. head=insertn(30,head,20);
  162. head=insertn(40,head,30);
  163. head=insertn(50,head,40);
  164. head=insertn(60,head,50);
  165. head=insertn(70,head,60);
  166. head=remove_head(head);
  167. display(head);
  168. cout<<"Using recursion reversed"<<endl;
  169. reverse_rec(head);
  170. display(head);
  171. }
Add Comment
Please, Sign In to add comment