分析:
两条单向链表相交的唯一可能是(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 }