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; // 没有相交节点
}
}
更优解法:双指针
后续更...

浙公网安备 33010602011771号