160相交链表
思路一开始要在达到题目所要求的条件,思路是没有的,但是如果没有题目的要求的话,直接用一个List就能解决问题,现在只讲题目的要求的那种方法来做。
首先我们将A、B链表图像化,从中寻找规律:
红色部分代表重叠相同部分,绿色部分代表不同。如果直接相比,肯定比不了,那如何进行比较呢,我们可以通过上下长度相加,使得长度变得一样来进行比较,即上面的链表加上下面的链表,下面的链表添加上面的链表。
此时我们就可以直接通过循环来进行直接比较了。
代码如下:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode curA=headA;
ListNode curB=headB;
while (curA!=curB){
curA=curA==null?headB:curA.next;
curB=curB==null?headA:curB.next;
}
return curA;
}
|