1.问题描述
有两个链表相交,找到相交的结点。
比如以上两个链表,相交的起始节点是c1
2.问题分析:
两个链表肯定有一个长,一个短,使用两个引用,把两个链表的长度相减,假设长度为diff,让长链表的引用先走diff步,之后当长链表的引用不等于短链表的引用时,两个引用都各走一步,当它们第一次相等时,找到相交的结点,这时随便返回一个对这两个链表的引用。
代码:
public class Solution {
public int getLength(ListNode head)
{
int len=0;
ListNode cur=head;
while(cur!=null)
{
cur=cur.next;
len++;
}
return len;
}
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int a = getLength(headA);
int b= getLength(headB);
ListNode longer = headA;
ListNode shorter = headB;
int diff=0;
if(a>b)
{
diff=a-b;
longer=headA;
shorter=headB;
}else
{
diff=b-a;
longer=headB;
shorter=headA;
}
for (int i = 0; i < diff; i++) {
longer = longer.next;
}
while (longer != shorter) {
longer = longer.next;
shorter = shorter.next;
}
return shorter;
}
}