Advertisement
WadeRollins2710

All about pointers & linked lists

Apr 15th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.24 KB | None | 0 0
  1. //Trần Việt Anh - 6:00PM - 15/4/2019
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct Node
  7. {
  8.     int value;
  9.     Node* next;
  10. };
  11.  
  12.  
  13. Node* initLinkedList(int n, int arr[]) {
  14.     Node* p[n];
  15.     for (int i = 0; i < n; i++)
  16.         p[i] = new Node();
  17.     for (int i = 0; i < n - 1; i++) {
  18.         p[i] -> value = arr[i];
  19.         p[i] -> next = p[i + 1];
  20.     }
  21.     p[n - 1] -> value = arr[n - 1];
  22.     p[n - 1] -> next = NULL;
  23.     return p[0];
  24. }
  25.  
  26. void print(Node* head)
  27. {
  28.     Node *n;
  29.     n = head;
  30.     while (n != NULL) {
  31.         cout <<  n -> value << " ";
  32.         n = n -> next;
  33.     }
  34.     cout << endl;
  35. }
  36.  
  37. Node* insertHead(Node* head, int value)
  38. {
  39.     Node *result;
  40.     result -> value = value;
  41.     result -> next = head;
  42.     return result;
  43. }
  44.  
  45. Node* insertTail(Node* head, int value)
  46. {
  47.     Node *n;
  48.     n = head;
  49.     if (n == NULL) {
  50.         head = new Node();
  51.         head -> value = value;
  52.         head -> next = NULL;
  53.     }
  54.     else {
  55.         while (n -> next != NULL) n = n -> next;
  56.         Node *insertNode;
  57.         insertNode = new Node();
  58.         insertNode -> value = value;
  59.         insertNode -> next = NULL;
  60.         n -> next = insertNode;
  61.     }
  62.     return head;
  63. }
  64.  
  65. Node* deleteNode(Node* head, int pos)
  66. {
  67.     int currentPos = 0;
  68.     if (pos == 0)
  69.         return head -> next;
  70.     Node *n = head;
  71.     while (currentPos < pos - 1) {
  72.         n = n -> next;
  73.         currentPos++;
  74.     }
  75.     n -> next = n -> next -> next;
  76.     return head;
  77. }
  78.  
  79. int getValue(Node* head, int pos)
  80. {
  81.     int currentPos = 0;
  82.     Node *n = head;
  83.     while (currentPos < pos) {
  84.         n = n -> next;
  85.         currentPos++;
  86.     }
  87.     return n -> value; // Change this line
  88. }
  89.  
  90. Node* deleteDuplicates(Node* head) {
  91.     Node* n;
  92.     n = head;
  93.     Node* temp;
  94.     temp = head;
  95.     while (n != NULL) {
  96.         bool foundDuplicate = false;
  97.         while (n -> next != NULL && n -> next -> value == temp -> value) {
  98.             foundDuplicate = true;
  99.             n = n -> next;
  100.         }
  101.         if (foundDuplicate) {
  102.             cout << "found" << endl;
  103.             temp -> next = n -> next;
  104.             temp = n -> next;
  105.         }
  106.         else return head;
  107.         n = n -> next;
  108.     }
  109.     return head;
  110. }
  111.  
  112. Node* insert(Node* head, int value) {
  113.     Node* n = head;
  114.     if (n -> value >= value) {
  115.         Node* insertNode = new Node();
  116.         insertNode -> value = value;
  117.         insertNode -> next = n;
  118.         return insertNode;
  119.     }
  120.     while (n -> next !=  NULL && n -> next -> value <= value) n = n -> next;
  121.     Node* insertNode = new Node();
  122.     insertNode -> value = value;
  123.     insertNode -> next = n -> next;
  124.     n -> next = insertNode;
  125.     return head;
  126. }
  127.  
  128. int getNodeValue(Node* head, int index) {
  129.     int pos = 0;
  130.     Node* n = head;
  131.     while (pos < index) {
  132.         n = n -> next;
  133.         pos++;
  134.     }
  135.     return n -> value;
  136. }
  137.  
  138. Node* convert(Node* head)
  139. {
  140.     if (head == NULL) return head;
  141.     Node* tail = head; int length = 1;
  142.     Node* start = head;
  143.     Node* temp = head;
  144.     while (tail -> next != NULL) {
  145.         tail = tail -> next;
  146.         length++;
  147.     }
  148.     for (int i = length / 2 - 1; i > 0; i--) {
  149.         for (int j = 0; j < i; j++) {
  150.             temp = temp -> next;
  151.             tail -> next = new Node(); tail = tail -> next;
  152.             tail -> value = temp -> value;
  153.         }
  154.         temp = temp -> next; start -> next = temp;
  155.         start = temp;
  156.         for (int j = 0; j < i; j++) {
  157.             temp = temp -> next;
  158.             tail -> next = new Node(); tail = tail -> next;
  159.             tail -> value = temp -> value;
  160.         }
  161.         temp = temp -> next; start -> next = temp;
  162.         start = temp;
  163.     }
  164.     return head;
  165. }
  166.  
  167. int main() {
  168.  
  169.     Node* head;
  170.     int arr[6] = {1, 3, 5, 2, 4, 6};
  171.  
  172.     head = initLinkedList(6, arr);
  173.  
  174.     cout << "Initialize successful" << endl;
  175.  
  176.     print(head);
  177.  
  178.     head = insertHead(head, 5);
  179.     print(head);
  180.  
  181.     head = insertTail(head, 2);
  182.     print(head);
  183.  
  184.     head = deleteNode(head, 0);
  185.     print(head);
  186.  
  187.     cout << getValue(head, 2) << endl;
  188.  
  189.     head = deleteDuplicates(head);
  190.     print(head);
  191.  
  192.     head = insert(head, 1);
  193.     print(head);
  194.  
  195.     head = convert(head);
  196.     print(head);
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement