请写一个程序,找到两个单链表最开始的交叉节点。
样例
下列两个链表:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
class Solution {
public:
/**
* @param headA: the first list
* @param headB: the second list
* @return: a ListNode
*/
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
// write your code here
/*这个思路采用栈实现,以前的思路采用先走n步*/
if(headA==NULL||headB==NULL) return NULL;
ListNode* p=headA;
stack<ListNode*> my1;
stack<ListNode*> my2;
while(p)
{
my1.push(p);
p=p->next;
}
p=headB;
while(p)
{
my2.push(p);
p=p->next;
}
while((!my1.empty())&& (!my2.empty()))
{
if((my1.top()->val)==(my2.top()->val))
{
p=my1.top();
my1.pop();
my2.pop();
}
else
break;
}
return p;
}
};