
这道题因为两个链表的长度不一样,所以它们到达相交点的起点不一样,如果同时移动两个链表指针遍历链表,那么很大概率会找不到相交点,所以这道题就变成如何使它们到相交点的起点相同,起点相同之后再同时移动两个链表的指针就可以找到解了。
思路很简单,只要分别求出两个链表的长度,

再用较长的长度lenB减去较短的长度lenA得到差值diff,然后让较长的链表先走diff步,这样一来他们的起点就相同了。

然后就可以同时让A和B每次移动指针比较直到A和B指向的节点相等就可以了。
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headA==null || headB==null) return null;if(headA==null && headB==null) return null;int lenA=0; //链表A长度int lenB=0; //链表B长度ListNode a=headA;ListNode b=headB;//求出headA的长度while(a!=null){lenA++;a=a.next;}//求出headB的长度while(b!=null){lenB++;b=b.next;}a=headA;b=headB;//判断哪个链表比较长if(lenA>lenB){int diff=lenA-lenB;//先让headA走diff步for(int i=1;i<=diff;i++){a=a.next;}}else{int diff=lenB-lenA;//先让headB走diff步for(int i=1;i<=diff;i++){b=b.next;}}while (a != null) {if (a == b) return a;else {a = a.next;b = b.next;}}return null;}}
LeeCode上运行结果:

文章转载自码农历险技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




