当前位置:   article > 正文

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。

将两个递增的有序链表合并为一个递增的有序链表
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct Node
  4. {
  5. int data;
  6. struct Node* next;
  7. } LNode, * LinkList;
  8. LinkList InitList()
  9. {
  10. LinkList L = (LNode*)malloc(sizeof(LNode));
  11. L->next = NULL;
  12. return L;
  13. }
  14. void Append(LinkList L, int d)
  15. {
  16. LNode* cur;
  17. cur = L;
  18. while (cur->next != NULL) cur = cur->next;
  19. LNode* p = (LinkList)malloc(sizeof(LNode));
  20. p->data = d;
  21. cur->next = p;
  22. p->next = NULL;
  23. }
  24. void Pprint(LinkList L)
  25. {
  26. LNode* cur;
  27. cur = L->next;
  28. while (cur != NULL)
  29. {
  30. printf("%d\n", cur->data);
  31. cur = cur->next;
  32. }
  33. }
  34. LinkList ListSort(LinkList L1, LinkList L2)
  35. {
  36. LNode* p1, * p2, * pre=NULL;
  37. p1 = L1;
  38. p2 = L2;
  39. while (p1 != NULL && p2 != NULL)
  40. {
  41. if (p1->data <= p2->data)
  42. {
  43. pre = p1;
  44. p1 = p1->next;
  45. }
  46. else
  47. {
  48. if (pre != NULL) pre->next = p2;
  49. pre = p2;
  50. p2 = p2->next;
  51. pre->next = p1;
  52. }
  53. }
  54. if (p1 == NULL) pre->next = p2;
  55. return L1->data >= L2->data ? L1 : L2;
  56. }
  57. void main()
  58. {
  59. LinkList L1;
  60. L1 = InitList();
  61. Append(L1, 4);
  62. Append(L1, 9);
  63. Append(L1, 10);
  64. LinkList L2;
  65. L2 = InitList();
  66. Append(L2, 3);
  67. Append(L2, 5);
  68. Append(L2, 10);
  69. Append(L2, 15);
  70. ListSort(L1, L2);
  71. L1 = ListSort(L1, L2);
  72. Pprint(L1);
  73. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码吟游诗人/article/detail/62930
推荐阅读
相关标签
  

闽ICP备14008679号