编写一个程序,找到两个单链表相交的起始节点。 《剑指Offer》同题:面试题52. 两个链表的第一个公共节点 《程序员面试金典》同题:面试题 02.07. 链表相交
/**
* 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 *ha = headA, *hb = headB;
int lena = 0, lenb = 0;
while(ha)
{
++lena;
ha = ha->next;
}
while(hb)
{
++lenb;
hb = hb->next;
}
int t = abs(lena - lenb);
hb = headB;
ha = headA;
if(lenb >= lena)
{
while(t--)
hb = hb->next;
}
else//(lenb < lena)
{
while(t--)
ha = ha->next;
}
while(ha&&(ha!=hb))
{
ha = ha->next;
hb = hb->next;
}
return ha;
}
};
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *ha = headA, *hb = headB;
while(ha != hb)
{
ha = ha? ha->next : headB;//到达尾部,跳转到另一条链表
hb = hb ? hb->next : headA;
}
return ha;
}
};