PTA-数据结构 两个有序链表序列的合并

太过爱你忘了你带给我的痛 2022-05-09 08:14 268阅读 0赞

7-2 两个有序链表序列的合并 (20 分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

输入样例:

  1. 1 3 5 -1
  2. 2 4 6 8 10 -1

输出样例:

  1. 1 2 3 4 5 6 8 10
  2. //库函数头文件包含
  3. #include<stdio.h>
  4. #include<malloc.h>
  5. #include<stdlib.h>
  6. //函数状态码定义
  7. #define TRUE 1
  8. #define FALSE 0
  9. #define OK 1
  10. #define ERROR 0
  11. #define INFEASIBLE -1
  12. #define OVERFLOW -2
  13. typedef int Status;
  14. typedef int ElemType;
  15. typedef struct LNode{
  16. ElemType data;
  17. struct LNode* next;
  18. }LNode,*Linklist;
  19. Status InitList(Linklist &L)
  20. {
  21. L = (Linklist)malloc(sizeof(LNode));
  22. if(!L)
  23. exit(OVERFLOW);
  24. L->next = NULL;
  25. return OK;
  26. }
  27. void InsertList(Linklist &L)
  28. {
  29. ElemType e;
  30. Linklist p = L;
  31. Linklist curp;
  32. while(scanf("%d",&e) && e!=-1)
  33. {
  34. curp = (Linklist)malloc(sizeof(LNode));
  35. curp->data = e;
  36. curp->next = NULL;
  37. p->next = curp;
  38. p = p->next;
  39. }
  40. }
  41. void PrintList(Linklist &L)
  42. {
  43. if(!L)
  44. {
  45. printf("NULL\n");
  46. return ;
  47. }
  48. Linklist p = L->next;
  49. int flag = 0;
  50. while(p)
  51. {
  52. if(!flag)
  53. {
  54. printf("%d",p->data);
  55. flag++;
  56. }
  57. else
  58. printf(" %d",p->data);
  59. p = p->next;
  60. }
  61. printf("\n");
  62. }
  63. Linklist MergeList(Linklist s1,Linklist s2)
  64. {
  65. Linklist p1 = s1->next;
  66. Linklist p2 = s2->next;
  67. if(!p1 && !p2)
  68. return NULL;
  69. else if(p1 && !p2)
  70. return s1;
  71. else if(!p1 && p2)
  72. return s2;
  73. Linklist s3 = s1;
  74. Linklist p3 = s3;
  75. while(p1 && p2)
  76. {
  77. if(p1->data <= p2->data)
  78. {
  79. p3->next = p1;
  80. p1 = p1->next;
  81. p3 = p3->next;
  82. p3->next = NULL;
  83. }
  84. else
  85. {
  86. p3->next = p2;
  87. p2 = p2->next;
  88. p3 = p3->next;
  89. p3->next = NULL;
  90. }
  91. }
  92. if(!p1)
  93. p3->next = p2;
  94. else
  95. p3->next = p1;
  96. return s3;
  97. }
  98. int main()
  99. {
  100. Linklist s1,s2;
  101. InitList(s1);
  102. InsertList(s1);
  103. InitList(s2);
  104. InsertList(s2);
  105. Linklist s3 = MergeList(s1,s2);
  106. PrintList(s3);
  107. return 0;
  108. }

发表评论

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

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

相关阅读