Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. template<typename T>
  9. class Node
  10. {
  11. public:
  12.     Node();
  13.     Node(T value, Node<T>* nextNode);
  14.     T data;
  15.     Node<T>* next;
  16. };
  17.  
  18. template<typename T>
  19. class LinkedList
  20. {
  21. public:
  22.     LinkedList();
  23.     Node<T>* getHead() const { return head };  // return the head poiter
  24.     Node<T>* getTail() const { return tail };  // returns the tail pointer
  25.     void listAppend(T value);  // inserts an element at the end of the list
  26.     void listPrepend(T value); //inserts a n element at the head of the list
  27.     void insertAfter(Node<T>* curNode, T value); // Insert value after the curNode
  28.     void removeAfter(Node<T>* curNode); // remove Node after CurNode
  29.     void removeHead();  // Removes the first element
  30.     void removeTail();  // removes the last element
  31.     void printList() const;  // print the elements of the linked list
  32. private:
  33.     Node<T>* head;
  34.     Node<T>* tail;
  35. };
  36.  
  37. template<typename T>
  38. void LinkedList<T>::printList() const
  39. {
  40.     Node<T>* temp = head;  // or temp = head
  41.     while (temp != NULL)
  42.     {
  43.         std::cout << temp->data << " ";
  44.         temp = temp->next;
  45.     }
  46.     std::cout << "\n";
  47. }
  48.  
  49. template<typename T>
  50. void LinkedList<T>::removeAfter(Node<T>* curNode)
  51. {
  52.     if (curNode->next == NULL)
  53.         std::cout << "Cannot remove Node\n";
  54.     else
  55.     {
  56.         Node<T>* temp = curNode->next;
  57.         curNode->next = temp->next;
  58.         delete temp;
  59.     }
  60. }
  61.  
  62. template<typename T>
  63. void LinkedList<T>::removeTail()
  64. {
  65.     Node<T>* temp = head;
  66.     while (temp->next != tail) // move until reaching the node
  67.         temp = temp->next;        // before the tail node.
  68.     temp->next = NULL;
  69.     delete tail;
  70.     tail = temp;
  71. }
  72.  
  73. template<typename T>
  74. void LinkedList<T>::removeHead()
  75. {
  76.     if (head != NULL)
  77.     {
  78.         Node<T>* temp = head;
  79.         head = head->next;
  80.         delete temp;
  81.     }
  82. }
  83.  
  84. template<typename T>
  85. void LinkedList<T>::insertAfter(Node<T>* curNode, T value)
  86. {
  87.     if (head == NULL)  // empty list, insert at the head
  88.     {
  89.         Node<T>* newNode = new Node<T>(value, NULL);
  90.         head = newNode;
  91.         tail = newNode;
  92.     }
  93.     else if (curNode == tail)  //insert after the tail
  94.     {
  95.         Node<T>* newNode = new Node<T>(value, curNode->next);
  96.         tail->next = newNode;
  97.         tail = newNode;
  98.     }
  99.     else // insert in the middle
  100.     {
  101.         Node<T>* newNode = new Node<T>(value, curNode->next);
  102.         curNode->next = newNode;
  103.     }
  104. }
  105.  
  106. template<typename T>
  107. void LinkedList<T>::listPrepend(T value)
  108. {
  109.     Node<T>* temp = new Node<T>(value, NULL);
  110.     if (head == NULL) // list empty
  111.     {
  112.         head = temp;
  113.         tail = temp;
  114.     }
  115.     else
  116.     {
  117.         temp->next = head;
  118.         head = temp;
  119.     }
  120. }
  121.  
  122. template<typename T>
  123. void LinkedList<T>::listAppend(T value)
  124. {
  125.     Node<T>* newNode = new Node<T>(value, NULL);
  126.     if (tail == NULL)
  127.         head = tail = newNode;
  128.     else
  129.     {
  130.         tail->next = newNode;
  131.         tail = newNode;
  132.     }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement