【力扣】160.相交链表
160.相交链表
这个题目因为我之前在学指针的时候没学好,所以总感觉有一种畏难,我害怕。但是当真正的开始学习之后,发现现在的脑袋还是能用的,所以不要放弃,你可以的!
题解:
总的来说还是挺简单的,大家看官方的解答就应该能够看懂了。这里就说一下我的理解。
考虑两种情况:
1、相交:现在已知二者相交,那么当两个链表长度相同的时候,可以是同时到达的,这个的实现直接就用while循环就行了。但是当二者长度不相同时,那如何能让其指针指向相同的target呢,是不是只要遍历的长度一样就可以了?
假设链表P1,P2的总长度分别为m,n。其中P1,P2不相交的长度分别是a,b,相交的长度是c。那么当链表p1一直在遍历的时候直到其为空,我们让他指向p2的头结点,同理p2也是一样,这样两个链表均会在走了a+c+b之后在相交点同时到达。
2、不相交:不相交就不用考虑那么多了,因为最终两个链表的指针都会指向null,直接返回即可
代码:
参考了官方的嗷
/**
* 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;
}
ListNode pA=headA,pB=headB;
while(pA!=pB){
pA=pA==null?headB:pA.next;
pB=pB==null?headA:pB.next;
}
return pA;
}
}