输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* pA = headA;
ListNode* pB = headB;
while(pA != pB){
// pA = (pA == NULL)? headB : pA->next;
// pB = (pB == NULL)? headA : pB->next;
if(pA == NULL){
pA = headB;
}else
pA = pA->next;
if(pB == NULL){
pB = headA;
}else
pB = pB->next;
}
return pA;
}
/*
我的理解: 两个链表长度分别为L1+C、L2+C, C为公共部分的长度,按照楼主的做法:
第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L2+C步后,
回到第一个人起点走L1步。 当两个人走的步数都为L1+L2+C时相遇了*/
};