【链表】如何判断两个链表是否相交

分析:

两条单向链表相交的唯一可能是(b),以为链表结点只有一个指针域不可能指向两个不同的结点。

手画图还是丑的,我需要学画图软件了(╯﹏╰)b

思路:

  • 遍历两个链表分别存入栈s1和s2;
  • 只要两个栈不空就一起出栈,遇到第一个不同的元素就是相交的结点。
 1 #include <iostream>
 2 #include <stack>
 3 using namespace std;
 4 typedef struct ListNode* List;
 5 struct ListNode {
 6     int data;
 7     List next;
 8 };
 9 stack<List>s1;
10 stack<List>s2;
11 
12 //遍历两个链表将结点入栈
13 void Traversal(List L1, List L2) {
14     while (L1!= NULL) {
15         s1.push(L1);
16         L1 = L1->next;
17     }
18     while (L2!= NULL) {
19         s2.push(L2);
20         L2 = L2->next;
21     }
22 }
23 //判断是否相交
24 List judge() {
25     List tmp=NULL;
26     while (!s1.empty() && !s2.empty) {
27         if (s1.top() != s2.top()) 
28             break;
29         tmp = s1.top();
30         s1.pop();
31         s2.pop;
32     }
33     return tmp;
34 }

 

posted @ 2020-04-07 13:20  PennyXia  阅读(534)  评论(0编辑  收藏  举报