Advertisement
Adrita

task 4( ds lab 6) 3rd sem

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