PTA:两个有序链表序列的交集

川长思鸟来 2023-05-22 06:54 107阅读 0赞

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

**输入样例:
1 2 5 -1
2 4 5 8 10 -1

输出样例:
2 5

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <new>
  4. using namespace std;
  5. struct Node
  6. {
  7. int number;
  8. Node *next;
  9. };
  10. typedef Node* ListNode;
  11. Node* CreatList(); //创建带空头结点的链表
  12. Node* intersection(ListNode &a, ListNode &b); //取出两个链表数据中的交集
  13. void PrintLsit(Node *p); //打印链表
  14. int main()
  15. {
  16. Node *head1, *head2, *head;
  17. head1 = CreatList();
  18. head2 = CreatList();
  19. head = intersection(head1, head2);
  20. PrintLsit(head);
  21. return 0;
  22. }
  23. Node* CreatList()
  24. {
  25. int temp;
  26. Node *head, *p, *tail;
  27. head = new(Node);
  28. head->next = NULL;
  29. tail = head;
  30. while (1)
  31. {
  32. cin >> temp;
  33. if (temp == -1)
  34. break;
  35. p = new(Node);
  36. p->next = NULL;
  37. p->number = temp;
  38. tail->next = p;
  39. tail = p;
  40. }
  41. return head;
  42. }
  43. Node* intersection(ListNode &a, ListNode &b)
  44. {
  45. Node *head, *p, *tail;
  46. head = new(Node);
  47. head->next = NULL;
  48. tail = head;
  49. a = a->next; b = b->next;
  50. while (a != NULL && b != NULL)
  51. {
  52. if (a->number > b->number)
  53. b = b->next;
  54. else if (a->number < b->number)
  55. a = a->next;
  56. else
  57. {
  58. p = new(Node);
  59. p->next = NULL;
  60. p->number = a->number;
  61. a = a->next;
  62. b = b->next;
  63. tail->next = p;
  64. tail = p;
  65. }
  66. }
  67. return head;
  68. }
  69. void PrintLsit(Node *p)
  70. {
  71. p = p->next;
  72. if (p == NULL)
  73. cout << "NULL" << endl;
  74. if (p != NULL)
  75. {
  76. cout << p->number;
  77. p = p->next;
  78. }
  79. while (p != NULL)
  80. {
  81. cout << " " << p->number;
  82. p = p->next;
  83. }
  84. }

发表评论

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

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

相关阅读