当前位置:   article > 正文

C++基础-实现双向链表的创建、插入、删除等简单操作_c++双向链表删除

c++双向链表删除

1、实现双向链表的创建、插入、删除等简单操作

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. #define EXIT_FAILURE 0
  5. //结点类
  6. class Node
  7. {
  8. public:
  9. int data;
  10. Node *pPre, *pNext;
  11. };
  12. //双向链表类
  13. class DoubleLinkList
  14. {
  15. public:
  16. DoubleLinkList() {
  17. head = new Node;
  18. head->data = 0;
  19. head->pNext = NULL;
  20. head->pPre = NULL;
  21. }
  22. ~DoubleLinkList() {
  23. delete head;
  24. }
  25. void CreateLinkList(int n); //创建链表
  26. void InsertNode(int position, int d); //在指定位置处插入结点
  27. void TraverseLinkList(); //遍历链表
  28. bool IsEmpty(); //判断链表是否为空
  29. int GetLength(); //获得链表长度
  30. void DeleteNode(int position); //删除指定位置处结点
  31. void DeleteLinkList(); //删除链表
  32. private:
  33. Node *head;
  34. };
  35. void DoubleLinkList::CreateLinkList(int n)
  36. {
  37. if (n < 0) {
  38. cout << "输入结点个数错误!" << endl;
  39. exit(EXIT_FAILURE);
  40. } else {
  41. int i = 0;
  42. Node *pnew, *ptemp;
  43. ptemp = head;
  44. i = n;
  45. while (n-- > 0) {
  46. cout << "请输入第" << i - n << "个结点值:";
  47. pnew = new Node;
  48. cin >> pnew->data;
  49. pnew->pNext = NULL;
  50. pnew->pPre = ptemp;
  51. ptemp->pNext = pnew;
  52. ptemp = pnew;
  53. }
  54. }
  55. }
  56. void DoubleLinkList::InsertNode(int position, int d)
  57. {
  58. if (position < 0 || position > GetLength() + 1) {
  59. cout << "输入位置错误!" << endl;
  60. exit(EXIT_FAILURE);
  61. } else {
  62. Node *pnew, *ptemp;
  63. pnew = new Node;
  64. pnew->data = d;
  65. ptemp = head;
  66. while (position-- > 1)
  67. ptemp = ptemp->pNext;
  68. if (ptemp->pNext != NULL)
  69. ptemp->pNext->pPre = pnew;
  70. pnew->pNext = ptemp->pNext;
  71. pnew->pPre = ptemp;
  72. ptemp->pNext = pnew;
  73. ptemp = pnew;
  74. }
  75. }
  76. //遍历链表
  77. void DoubleLinkList::TraverseLinkList()
  78. {
  79. Node *ptemp = head->pNext;
  80. while (ptemp != NULL) {
  81. cout << ptemp->data << " ";
  82. ptemp = ptemp->pNext;
  83. }
  84. cout << endl;
  85. }
  86. //检测链表是否为空
  87. bool DoubleLinkList::IsEmpty()
  88. {
  89. if (head->pNext == NULL)
  90. return true;
  91. else
  92. return false;
  93. }
  94. //得到当前链表的长度
  95. int DoubleLinkList::GetLength()
  96. {
  97. int n = 0;
  98. Node *ptemp = head->pNext;
  99. while (ptemp != NULL) {
  100. n++;
  101. ptemp = ptemp->pNext;
  102. }
  103. return n;
  104. }
  105. //删除链表的结点
  106. void DoubleLinkList::DeleteNode(int position)
  107. {
  108. if (position < 0 || position > GetLength()) {
  109. cout << "输入数据错误!" << endl;
  110. exit(EXIT_FAILURE);
  111. } else {
  112. Node *pdelete, *ptemp;
  113. ptemp = head;
  114. while (position-- > 1)
  115. ptemp = ptemp->pNext;
  116. pdelete = ptemp->pNext;
  117. if (pdelete->pNext != NULL)
  118. pdelete->pNext->pPre = ptemp;
  119. ptemp->pNext = pdelete->pNext;
  120. delete pdelete;
  121. pdelete = NULL;
  122. }
  123. }
  124. //删除链表
  125. void DoubleLinkList::DeleteLinkList()
  126. {
  127. Node *pdelete, *ptemp;
  128. pdelete = head->pNext;
  129. while (pdelete != NULL) {
  130. ptemp = pdelete->pNext;
  131. head->pNext = ptemp;
  132. if (ptemp != NULL)
  133. ptemp->pPre = head;
  134. delete pdelete;
  135. pdelete = ptemp;
  136. }
  137. }
  138. //测试函数
  139. int main()
  140. {
  141. DoubleLinkList dl;
  142. int position = 0, value = 0, n = 0;
  143. bool flag = false;
  144. cout << "请输入需要创建双向链表的结点个数:";
  145. cin >> n;
  146. dl.CreateLinkList(n);
  147. cout << "打印链表值如下:";
  148. dl.TraverseLinkList();
  149. cout << "请输入插入结点的位置和值:";
  150. cin >> position >> value;
  151. dl.InsertNode(position, value);
  152. cout << "打印链表值如下:";
  153. dl.TraverseLinkList();
  154. cout << "请输入要删除结点的位置:";
  155. cin >> position;
  156. dl.DeleteNode(position);
  157. cout << "打印链表值如下:";
  158. dl.TraverseLinkList();
  159. dl.DeleteLinkList();
  160. flag = dl.IsEmpty();
  161. if (flag)
  162. cout << "删除链表成功!" << endl;
  163. else
  164. cout << "删除链表失败!" << endl;
  165. return 0;
  166. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号