两个有序链表序列的合并

ゞ 浴缸里的玫瑰 2022-05-09 04:33 270阅读 0赞

已知两个非降序链表序列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. #include<stdio.h>
  3. #include<malloc.h>
  4. #include<stdlib.h>
  5. #define TRUE 1
  6. #define FALSE 0
  7. #define OK 1
  8. #define ERROR 0
  9. #define INFEASIBLE -1
  10. #define OVERFLOW -2
  11. typedef int Status;
  12. typedef int ElemType;
  13. typedef struct LNode
  14. {
  15. ElemType data;
  16. struct LNode *next;
  17. } LNode,*LinkList;
  18. Status ListCreate_CL(LinkList &CL);
  19. void ListPrint_CL(LinkList &L)
  20. {
  21. LNode * t = L->next;
  22. int firstNum = 1;
  23. if(t == NULL) printf("NULL\n");
  24. while(t != NULL)
  25. {
  26. if(firstNum)
  27. {
  28. printf("%d", t->data);
  29. firstNum = 0;
  30. }
  31. else
  32. printf(" %d", t->data);
  33. t = t->next;
  34. }
  35. }
  36. int main()
  37. {
  38. LinkList c1,c2,c3,pa,pb,pc;
  39. c3=(LinkList)malloc(sizeof(LNode));
  40. c3->next=NULL;
  41. ListCreate_CL(c1);
  42. ListCreate_CL(c2);
  43. pa=c1->next;
  44. pb=c2->next;
  45. pc=c3;
  46. while(pa&&pb)
  47. {
  48. if(pa->data<=pb->data)
  49. {
  50. pc->next=pa;
  51. pc=pa;
  52. pa=pa->next;
  53. }
  54. else if(pa->data>pb->data)
  55. {
  56. pc->next=pb;
  57. pc=pb;
  58. pb=pb->next;
  59. }
  60. }
  61. if(pa)
  62. {
  63. pc->next=pa;
  64. }
  65. else
  66. {
  67. pc->next=pb;
  68. }
  69. ListPrint_CL(c3);
  70. return 0;
  71. }
  72. Status ListCreate_CL(LinkList &CL)
  73. {
  74. CL = (LinkList)malloc(sizeof (LNode) );
  75. int n,f=1;
  76. LNode *p,*q;
  77. CL->next=NULL;
  78. p=CL;
  79. while(f){
  80. scanf("%d",&n);
  81. if(n>=0){
  82. q=(LNode *)malloc(sizeof(LNode));
  83. q->data=n;
  84. p->next=q;
  85. p=q;
  86. }
  87. else{
  88. f=0;
  89. p->next=NULL;
  90. }
  91. }
  92. return OK;
  93. }

发表评论

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

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

相关阅读

    相关 合并有序

    合并两个有序链表 1、题目 题目要求:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输