题目 相交链表
编写一个程序,找到两个单链表相交的起始节点。
思路
假设链表A的 4->1 这部分为 a , 8->4->5的这部分为 c A=a+c
假设链表B的 5->0->1 这部分为 b , 8->4->5的这部分为 c B=b+c
tip:即公共的部分为c
那么现在在A的后面添加一条和B一样的链,在B后面添加一条和A一样的链
A=(a+c) + (b+c) ; b=(b+c) + (a+c);
即A=(a+c+b)+c ;B=(b+c+a)+c;
聪明的你发现了吧,前面部分(a+c+b==b+c+a)是长度相同的
,那么这道题就容易解决了,即第一个相同的点就是第一个交点
代码
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//A遍历完了给他接上B的,B遍历完第一次给他接上A的,当第一次相等的时候,就是交点
if(headA==null||headB==null)
return null;
ListNode node1 = headA;
ListNode node2 = headB;
while(node1!=node2){
if(node1==null){
node1=headB;
}else{
node1=node1.next;
}
if(node2==null){
node2=headA;
}else{
node2=node2.next;
}
}
return node2;
}