leetcode-160-相交链表

日期:2026-09-25
标签:#链表 #java #双指针

我的第一版思路

直接想到的是暴力双重循环比较,但是代码bug比较多:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode cur1 = headA;
        ListNode cur2 = headB;
        while (cur1.next != null){//最后一个节点漏掉,最后一个节点的next就是null。
            while(cur2.next != null){//cur2每轮外循环,没有重置;以及会漏掉最后一个节点,同上。
                if(cur1 == cur2){
                    return cur1;
                } else {
                    cur2 = cur2.next;
                }
            }
            cur1 = cur1.next;
        }
        return cur1;//若两个链表不相交,应该返回null。
    }
}

结论

时间复杂度是O(m x n),用时比较长。官方的解题是使用双指针,思路更巧妙。

代码

修正后的暴力解法代码:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode cur1 = headA;
        while (cur1 != null){
            ListNode cur2 = headB; // 每次重置,回到 headB 重新开始。
            while(cur2 != null){
                if(cur1 == cur2){
                    return cur1; // 找到相交节点
                } 
                cur2 = cur2.next;
            }
            cur1 = cur1.next;
        }
        return null; // 没有相交节点
    }
}

更优解法:双指针

后续更...

posted @ 2026-09-25 22:31  aYogurt  阅读(6)  评论(0)    收藏  举报