• 链表应用(C++,递增合并、递增求交集、逆序、删除区间)


    1. #include
    2. using namespace std;
    3. typedef struct list
    4. {
    5. int data;
    6. list* next;
    7. }list,*linklist;
    8. void Newlist(linklist& l)
    9. {
    10. l = new list;
    11. l->next = NULL;
    12. }
    13. void Createlist(linklist& l)
    14. {
    15. cout << "输入链表长度:" << endl;
    16. int n;
    17. cin >> n;
    18. linklist p;
    19. for (int i = 0; i < n; i++)
    20. {
    21. p = new list;
    22. cin >> p->data;
    23. p->next = l->next;
    24. l->next = p;
    25. }
    26. }
    27. void Printlist(linklist l)
    28. {
    29. linklist p = l->next;
    30. while (p)
    31. {
    32. cout << p->data << " ";
    33. p = p->next;
    34. }
    35. cout << endl;
    36. }
    37. void Addlist(linklist& la, linklist& lb,linklist &lc)//合并递增序列
    38. {
    39. linklist pa = la->next, pb = lb->next,pc=lc=la,q;
    40. while (pa && pb)
    41. {
    42. if (pa->data < pb->data)
    43. {
    44. pc->next = pa;
    45. pc = pa;
    46. pa = pa->next;
    47. }
    48. else if (pa->data > pb->data)
    49. {
    50. pc->next = pb;
    51. pc = pb;
    52. pb = pb->next;
    53. }
    54. else
    55. {
    56. pc->next = pa;
    57. pc = pa;
    58. pa = pa->next;
    59. q = pb->next;
    60. delete pb;
    61. pb = q;
    62. }
    63. }
    64. pc->next = pa ? pa : pb;
    65. }
    66. void Intersection(linklist& la, linklist& lb, linklist& lc)//两递增链表求交集
    67. {
    68. linklist pa = la->next, pb = lb->next, pc = lc = la, q;
    69. while (pa && pb)
    70. {
    71. q = new list;
    72. if (pa->data == pb->data)
    73. {
    74. pc->next = pa;
    75. pc = pa;
    76. pa = pa->next;
    77. q = pb;
    78. pb = pb->next;
    79. delete q;
    80. }
    81. else if (pa->data < pb->data)
    82. {
    83. q = pa;
    84. pa = pa->next;
    85. delete q;
    86. }
    87. else
    88. {
    89. q = pb;
    90. pb = pb->next;
    91. delete q;
    92. }
    93. }
    94. while (pa)
    95. {
    96. q = pa;
    97. pa = pa->next;
    98. delete q;
    99. }
    100. while (pb)
    101. {
    102. q = pb;
    103. pb = pb->next;
    104. delete q;
    105. }
    106. pc->next=NULL;
    107. delete lb;
    108. }
    109. int Max(linklist l)//链表中最大值
    110. {
    111. linklist lmax,p=l->next->next;
    112. if (l->next == NULL) return 0;
    113. lmax = l->next;
    114. while (p)
    115. {
    116. if (p->data > lmax->data)
    117. lmax = p;
    118. p = p->next;
    119. }
    120. return lmax->data;
    121. }
    122. void Inverse(linklist& l)//原地逆置
    123. {
    124. linklist p,q;
    125. p = l->next;
    126. l->next = NULL;
    127. while (p)
    128. {
    129. q = p->next;
    130. p->next = l->next;
    131. l->next = p;
    132. p = q;
    133. }
    134. }
    135. void Deleteminmax(linklist& l)//删除递增序列链表大于mink小于maxk的点
    136. {
    137. int mink, maxk;
    138. linklist p,pmin;
    139. pmin = NULL;
    140. p = l->next;
    141. cout << "输入mink:" << endl;
    142. cin >> mink;
    143. cout << "输入maxk:" << endl;
    144. cin >> maxk;
    145. while (p && p->data < mink)
    146. {
    147. pmin = p;
    148. p = p->next;
    149. }
    150. while (p && p->data < maxk)
    151. {
    152. p = p->next;
    153. }
    154. pmin->next = p;
    155. }
    156. int main()
    157. {
    158. linklist L1,L2,L3;
    159. int n;
    160. Newlist(L1);
    161. Newlist(L2);
    162. Newlist(L3);
    163. Createlist(L1);
    164. Createlist(L2);
    165. cout << "链表一:" << endl;
    166. Printlist(L1);
    167. cout << "链表二:" << endl;
    168. Printlist(L2);
    169. cout << "两递增链表合并为一个递增链表:" << endl;
    170. Addlist(L1, L2, L3);
    171. Printlist(L3);
    172. cout << "两递增链表求交集:" << endl;
    173. Intersection(L1, L2, L3);
    174. Printlist(L3);
    175. Inverse(L1);
    176. cout << "逆置后链表:" << endl;
    177. Printlist(L1);
    178. cout << "删除递增序列链表大于等于mink小于maxk的点:" << endl;
    179. Deleteminmax(L1);
    180. Printlist(L1);
    181. }

  • 相关阅读:
    python按照【修改时间顺序】读取文件夹下的TXT文本内容
    React.js学习(二):案例源码学习“排序动画”
    【含视频教程】python实现图书管理系统
    计算机毕业设计Java茶叶企业管理系统(源码+系统+mysql数据库+lw文档)
    Day02SSM第二次笔记---加载properties文件和容器的相关知识
    依赖注入(Dependency Injection, DI)在 iOS 开发中的应用
    微软开发新模型;YouTube 推出新AI功能;可折叠iPhone 或发布?
    Hadoop集群配置运行
    #define 的神奇操作
    玩转 GPT4All
  • 原文地址:https://blog.csdn.net/qq_74156152/article/details/133000481