Advertisement
Khillz3000

LinkList.h

May 11th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. //Header file for LinkList Class
  2. #ifndef LINKLIST_H
  3. #define LINKLIST_H
  4.  
  5. //#include "stdafx.h"
  6.  
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11.  
  12. template <class T>
  13. class LinkList
  14. {
  15. private:
  16.  
  17. struct ListNode
  18. {
  19. T value1;
  20. struct ListNode *next;
  21. };
  22.  
  23. ListNode *head; // List head pointer
  24.  
  25. public:
  26. //***Constructor***
  27. LinkList();
  28. LinkList(const LinkList<T> &);
  29. //***Destructor***
  30. ~LinkList();
  31.  
  32.  
  33. //***LinkList Operations***
  34. //LinkList& operator=(const LinkList &);
  35. void appendNode(T);
  36. void insertNode(T);
  37. void deleteNode(T);
  38. T getNodeData();
  39. T getNext();
  40. void displayList() const;
  41. T getHead();
  42. bool searchList(T);
  43.  
  44. };
  45.  
  46. //Implimentation for LinkList
  47.  
  48. //***Constructor***
  49. template <class T>
  50. LinkList<T>::LinkList()
  51. {
  52. head = NULL;
  53.  
  54. cout<<"LinkList Constructor"<<endl;
  55. }
  56.  
  57. //***Copy Constructor***
  58. template <class T>
  59. LinkList<T>::LinkList( const LinkList &listObj )
  60. {
  61.  
  62. head = NULL;
  63.  
  64. ListNode *nodePtr;
  65.  
  66. nodePtr = listObj.head;
  67.  
  68. while(nodePtr != NULL)
  69. {
  70. appendNode(nodePtr->value1);
  71.  
  72. nodePtr = nodePtr->next;
  73. }
  74.  
  75. cout<<"LinkList Copy Constructor"<<endl;
  76. }
  77.  
  78. //****Copy assignment Operator***
  79. //template <class T>
  80. //LinkList<T>& LinkList<T> :: operator=(const LinkList<T> &other)
  81. //{
  82. //
  83. //}
  84.  
  85.  
  86. //***Destructor***
  87. template <class T>
  88. LinkList<T>::~LinkList()
  89. {
  90. ListNode *nodePtr;
  91. ListNode *nextNode;
  92.  
  93. nodePtr = head;
  94.  
  95. while(nodePtr != NULL)
  96. {
  97. nextNode = nodePtr->next;
  98. delete nodePtr;
  99.  
  100. nodePtr = nextNode;
  101. }
  102.  
  103. cout<<"LinkList Destructor"<<endl;
  104. }
  105.  
  106.  
  107.  
  108.  
  109. //***LinkList Operations***
  110. template <class T>
  111. void LinkList<T>::appendNode(T val1)
  112. {
  113. ListNode *newNode;
  114. ListNode *nodePtr;
  115.  
  116. //newNode = new ListNode(val1);
  117. newNode = new ListNode;
  118. newNode->value1 = val1;
  119. newNode->next = NULL;
  120. if (!head)
  121. {
  122. head = newNode;
  123. }
  124. else
  125. {
  126. nodePtr = head;
  127.  
  128. while (nodePtr->next)
  129.  
  130. nodePtr = nodePtr->next;
  131.  
  132. nodePtr->next = newNode;
  133. }
  134. }
  135.  
  136. template <class T>
  137. void LinkList<T>::insertNode(T val1)
  138. {
  139. ListNode *newNode;
  140. ListNode *nodePtr;
  141. ListNode *prevNode = NULL;
  142.  
  143. //newNode = new ListNode(val1);
  144. newNode = new ListNode;
  145. newNode->value1 = val1;
  146. newNode->next = NULL;
  147.  
  148. if (!head)
  149. {
  150. head = newNode;
  151. newNode->next = NULL;
  152. }
  153. else
  154. {
  155. nodePtr = head;
  156. prevNode = NULL;
  157.  
  158. while(nodePtr != NULL && nodePtr->value1 < val1)
  159. {
  160. prevNode = nodePtr;
  161. nodePtr = nodePtr->next;
  162. }
  163.  
  164. if(prevNode == NULL)
  165. {
  166. head = newNode;
  167. newNode->next = nodePtr;
  168. }
  169. else
  170. {
  171. prevNode->next = newNode;
  172. newNode->next = nodePtr;
  173. }
  174. }
  175.  
  176.  
  177. }
  178.  
  179. template <class T>
  180. void LinkList<T>::deleteNode(T searchVal)
  181. {
  182. ListNode *prevNode = NULL;
  183. ListNode *nodePtr;
  184.  
  185. if (!head)
  186. return;
  187.  
  188. if(head->value1 == searchVal)
  189. {
  190. nodePtr = head->next;
  191. delete head;
  192. head = nodePtr;
  193. }
  194.  
  195. else
  196. {
  197. nodePtr = head;
  198.  
  199. while(nodePtr != NULL && nodePtr->value1 != searchVal)
  200. {
  201. prevNode = nodePtr;
  202. nodePtr = nodePtr->next;
  203. }
  204.  
  205. if(nodePtr)
  206. {
  207. prevNode->next = nodePtr->next;
  208. delete nodePtr;
  209. }
  210. }
  211. }
  212.  
  213. template <class T>
  214. T LinkList<T>::getNodeData()
  215. {
  216. ListNode *nodePtr;
  217.  
  218. nodePtr = head;
  219.  
  220. return(nodePtr->value1);
  221. }
  222.  
  223. template <class T>
  224. T LinkList<T>::getNext()
  225. {
  226. ListNode *nodePtr;
  227.  
  228. nodePtr = head;
  229.  
  230. return(nodePtr->next);
  231. }
  232.  
  233. template <class T>
  234. void LinkList<T>::displayList() const
  235. {
  236. int count = 0;
  237.  
  238. ListNode *nodePtr;
  239.  
  240. nodePtr = head;
  241.  
  242.  
  243. while(nodePtr)
  244. {
  245.  
  246. cout<<"Node index "<<count<<endl;
  247. cout<<nodePtr->value1<<endl;
  248.  
  249. cout<<endl;
  250.  
  251. count++;
  252.  
  253. nodePtr = nodePtr->next;
  254.  
  255. }
  256. }
  257.  
  258. template <class T>
  259. bool LinkList<T>::searchList(T val1)
  260. {
  261. ListNode *nodePtr;
  262. int count = 0;
  263. nodePtr = head;
  264.  
  265.  
  266. while(nodePtr != NULL && nodePtr->value1 != val1)
  267. {
  268.  
  269. nodePtr = nodePtr->next;
  270. count++;
  271.  
  272. if(nodePtr->value1 == val1)
  273. {
  274. cout<<nodePtr->value1<<endl;
  275. return true;
  276. }
  277. else
  278. {
  279. return false;
  280. }
  281. }
  282. }
  283. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement