Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <functional>
  3.  
  4. using namespace std;
  5.  
  6. class Node
  7. {
  8. public:
  9. Node *prev;
  10. Node *next;
  11. int key;
  12. int value;
  13. };
  14.  
  15. Node *head = nullptr, *tail = nullptr;
  16.  
  17. void insertNode(int k, int v)
  18. {
  19. Node *newNode = new Node();
  20. newNode->key = k;
  21. newNode->value = v;
  22. newNode->prev = nullptr;
  23. newNode->next = nullptr;
  24.  
  25. if(head == nullptr)
  26. {
  27. head = newNode;
  28. tail = newNode;
  29. return;
  30. }
  31.  
  32. newNode->next = head;
  33.  
  34. if(newNode->next->key > newNode->key)
  35. {
  36. head = newNode;
  37. newNode->next->prev = newNode;
  38. return;
  39. }
  40. while (newNode->next->key < newNode->key)
  41. {
  42. if(newNode->next == tail)
  43. {
  44. newNode->prev = newNode->next;
  45. newNode->next->next = newNode;
  46. newNode->next = nullptr;
  47. tail = newNode;
  48. return;
  49. }
  50. newNode->next = newNode->next->next;
  51. }
  52.  
  53. if(newNode->next->key == newNode->key)
  54. {
  55. cout<<"Podany klucz:"<<newNode->key<<" juz istnieje."<<endl;
  56. return;
  57. }
  58.  
  59. newNode->prev = newNode->next->prev;
  60. newNode->next->prev = newNode;
  61. newNode->prev->next = newNode;//tu
  62.  
  63. return;
  64. }
  65.  
  66. void printList(Node *current)
  67. {
  68. int i=0;
  69. while(current != nullptr)
  70. {
  71. cout<<++i<<". Klucz: "<<current->key<<" Wartosc: "<<current->value<<endl;
  72. current = current->next;
  73.  
  74. if(i>10)
  75. break;
  76. }
  77. }
  78.  
  79. void removeNode(int k)
  80. {
  81. Node *i = head;
  82.  
  83. while(i!=nullptr)
  84. {
  85. if(i->key == k)
  86. {
  87. if(i == head)
  88. {
  89. i->next->prev = nullptr;
  90. head = i->next;
  91. }
  92. else if(i == tail)
  93. {
  94. i->prev->next = nullptr;
  95. tail = i->prev;
  96. }
  97. else
  98. {
  99. i->next->prev = i->prev;
  100. i->prev->next = i->next;
  101. }
  102.  
  103. delete i;
  104. break;
  105. }
  106. else
  107. {
  108. i = i->next;
  109. }
  110. }
  111. }
  112.  
  113. void findNode(int k)
  114. {
  115. Node *i = head;
  116. while(i != nullptr && i->key != k)
  117. {
  118. i = i->next;
  119. }
  120.  
  121. if (i == nullptr)
  122. {
  123. cout<<"Brak wartosci dla tego klucza."<<endl;
  124. return;
  125. }
  126.  
  127. cout<<i->value<<endl;
  128. }
  129.  
  130.  
  131. int main()
  132. {
  133.  
  134. insertNode(2, 2);
  135. insertNode(4, 4);
  136. insertNode(3, 3);
  137. insertNode(5, 5);
  138. insertNode(1, 1);
  139. insertNode(12, 12);
  140.  
  141. removeNode(1);
  142.  
  143. printList(head);
  144.  
  145. findNode(1421);
  146.  
  147. return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement