Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include "linkedlist.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. template <typename T>
  6. linkedlist<T>::linkedlist()
  7. : root(NULL)
  8. {
  9.  
  10. }
  11.  
  12. template <typename T>
  13. linkedlist<T>::~linkedlist()
  14. {
  15. node<T>* temp = root;
  16. while(temp){
  17. node<T>* todelete = temp;
  18. temp = temp->next;
  19. delete todelete;
  20. }
  21. root = NULL;
  22. }
  23. /*
  24. template <typename T>
  25. void linkedlist<T>::print()
  26. {
  27. cout << "no console output for this datatype" << endl;
  28. }
  29.  
  30. template <>
  31. void linkedlist<int>::print()
  32. {
  33. node<int>* temp = root;
  34. while(temp){
  35. cout << temp->getdata() << " -> ";
  36. temp = temp->next;
  37. }
  38. cout << endl;
  39. }
  40. */
  41. template <typename T>
  42. void linkedlist<T>::print(node<T>* inputnode)
  43. {
  44. node<T>* temp = inputnode;
  45. while(temp){
  46. cout << temp->getdata() << " -> ";
  47. temp = temp->next;
  48. }
  49. cout << endl;
  50. }
  51.  
  52. template <typename T>
  53. void linkedlist<T>::insert(const T& data)
  54. {
  55. cout << data << endl;
  56. if(!root)
  57. {
  58. root = new node<T>(data);
  59. print(root);
  60. return;
  61. }
  62. node<T>* temp = root;
  63. print(root);
  64. while(temp && temp->next != NULL)
  65. {
  66. temp = temp->next;
  67. }
  68. temp->next = new node<T>(data);
  69. print(root);
  70. }
  71.  
  72. template <typename T>
  73. node<T>* incrementby(node<T>* inputnode,int n)
  74. {
  75. node<T>* temp = inputnode;
  76. while(temp && --n > -1)
  77. {
  78. temp = temp->next;
  79. }
  80. return temp;
  81. }
  82.  
  83. /*
  84. 1 2 3 4 5 6 7
  85. 1 3
  86. 2 4
  87. */
  88.  
  89. template <typename T>
  90. void linkedlist<T>::reverse_even_nodes()
  91. {
  92. print(root);
  93. node<T>* temp = root;
  94. node<T>* secondhead = NULL;
  95. while(temp)
  96. {
  97. node<T>* tempnext = temp->next;
  98. if(tempnext)
  99. {
  100. temp->next = tempnext->next;
  101. }
  102. temp = tempnext;
  103. if(!secondhead)
  104. {
  105. secondhead = tempnext;
  106. }
  107. }
  108. print(root);
  109. print(secondhead);
  110. node<T>* reversed_even_node_head = reverse(secondhead);
  111. temp = root;
  112. print(reversed_even_node_head);
  113. while(temp && reversed_even_node_head)
  114. {
  115. node<T>* reversed_temp_node = reversed_even_node_head;
  116. reversed_even_node_head = reversed_even_node_head->next;
  117. node<T>* tempnext = temp->next;
  118. reversed_temp_node->next = tempnext;
  119. temp->next = reversed_temp_node;
  120. temp = tempnext;
  121. }
  122. print(root);
  123. }
  124.  
  125. template <typename T>
  126. node<T>* linkedlist<T>::reverse(node<T>* inputnode)
  127. {
  128. node<T>* firstnode = inputnode;
  129. node<T>* secondnode = NULL;
  130. node<T>* currenthead = inputnode;
  131. while(firstnode)
  132. {
  133. secondnode = firstnode->next;
  134. if(secondnode)
  135. {
  136. firstnode->next = secondnode->next;
  137. secondnode->next = currenthead;
  138. currenthead = secondnode;
  139. }
  140. else
  141. {
  142. break;
  143. }
  144. secondnode = NULL;
  145. }
  146. return currenthead;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement