力扣leetcode160题,相交链表使用双指针Java代码细节分析。
有时候算法题不知道怎么写代码,往往是因为没有考虑细节,或者细节考虑不全面。
/** * 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(headB==null||headB==null){ return null; } ListNode tempA=headA; ListNode tempB=headB; //注意两个同时为null的时候也会结束。(这是一个很巧妙的处理,比如两个链表长度一样,但是没有交接处) while(tempA!=tempB){ if(tempA!=null){ tempA=tempA.next; }else{ tempA=headB; } if(tempB!=null){ tempB=tempB.next; }else{ tempB=headA; } } return tempA; } }