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;}
}