双链表创建、删除、添加节点

骑猪看日落 2021-12-16 07:41 319阅读 0赞

双链表创建、删除、添加节点


  1. #include<queue>
  2. #include<iostream>
  3. using namespace std;
  4. // 有序链表
  5. const int arrrlens = 9;
  6. int arr[arrrlens] = { 0, 1, 2, 3, 5, 6, 7, 8, 9 };
  7. class Node {
  8. public:
  9. Node(int el = 0, Node* pNext = NULL, Node * pPre = NULL) {
  10. data = el;
  11. next = pNext;
  12. pre = pPre;
  13. }
  14. int data;
  15. Node* next, *pre;
  16. };
  17. class NodeList {
  18. public:
  19. public:
  20. NodeList() {
  21. head = new Node();
  22. tail = new Node();
  23. }
  24. ~NodeList() {
  25. delete head;
  26. delete tail;
  27. }
  28. int initList();
  29. int addElem(int);
  30. int delElem(int);
  31. int printList();
  32. private:
  33. Node* head, *tail;
  34. };
  35. int NodeList::initList()
  36. {
  37. Node* p = head;
  38. for (int i = 0; i < arrrlens; i++)
  39. {
  40. Node* node = new Node(arr[i]);
  41. p->next = node;
  42. node->pre = p;
  43. p = node;
  44. }
  45. return 0;
  46. }
  47. int NodeList::addElem(int node)
  48. {
  49. Node* p = head, *cur = NULL;
  50. Node* newnode = new Node(node);
  51. // 越过头节点
  52. while (p->next != NULL && p->next->data <= node)
  53. p = p->next;
  54. if (p->next != NULL)
  55. {
  56. newnode->next = p->next;
  57. newnode->pre = p;
  58. p->next->pre = newnode;
  59. p->next = newnode;
  60. cout << "从中间插入节点..." << endl;
  61. return 1;
  62. }
  63. else {
  64. p->next = newnode;
  65. newnode->pre = p;
  66. cout << "从尾部插入节点..." << endl;
  67. return 1;
  68. }
  69. return 0;
  70. }
  71. int NodeList::delElem(int node)
  72. {
  73. Node* p = head, * q, *cur;
  74. // 越过头节点
  75. p = p->next;
  76. while (p != NULL && p->data != node)
  77. p = p->next;
  78. if(p != NULL && p->next != NULL)
  79. {
  80. p->pre->next = p->next;
  81. p->next->pre = p->pre;
  82. cout << "从中间删除节点..." << endl;
  83. return 1;
  84. }
  85. if (p != NULL && p->next == NULL)
  86. {
  87. p->pre->next = NULL;
  88. cout << "从尾部删除节点..." << endl;
  89. return 1;
  90. }
  91. cout << "该节点不存在..." << endl;
  92. return 0;
  93. }
  94. int NodeList::printList()
  95. {
  96. Node* p = head;
  97. // 越过头节点
  98. p = p -> next;
  99. while (p != NULL)
  100. {
  101. cout << p->data << " ";
  102. p = p->next;
  103. }
  104. cout << endl;
  105. return 0;
  106. }
  107. int main()
  108. {
  109. NodeList list;
  110. list.initList();
  111. list.printList();
  112. list.addElem(31);
  113. list.printList();
  114. list.addElem(2);
  115. list.printList();
  116. list.delElem(31);
  117. list.printList();
  118. list.delElem(3);
  119. list.printList();
  120. return 0;
  121. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读