两个有序链表序列的交集

- 日理万妓 2022-05-09 04:58 244阅读 0赞

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

输入格式:

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

输出格式:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

输入样例:

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

输出样例:

  1. 2 5
  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)pa=pa->next;
  49. else if(pa->data>pb->data)pb=pb->next;
  50. else
  51. {
  52. pc->next=pa;
  53. pa=pa->next;
  54. pb=pb->next;
  55. pc=pc->next;
  56. }
  57. }
  58. pc->next=NULL;
  59. ListPrint_CL(c3);
  60. return 0;
  61. }
  62. Status ListCreate_CL(LinkList &CL)
  63. {
  64. CL = (LinkList)malloc(sizeof (LNode) );
  65. int n,f=1;
  66. LNode *p,*q;
  67. CL->next=NULL;
  68. p=CL;
  69. while(f)
  70. {
  71. scanf("%d",&n);
  72. if(n>=0)
  73. {
  74. q=(LNode *)malloc(sizeof(LNode));
  75. q->data=n;
  76. p->next=q;
  77. p=q;
  78. }
  79. else
  80. {
  81. f=0;
  82. p->next=NULL;
  83. }
  84. }
  85. return OK;
  86. }

发表评论

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

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

相关阅读