Open songyy5517 opened 1 year ago
思路:双指针遍历相遇
复杂度分析
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class Solution {
ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// 思路:双指针相遇
// 1. 异常处理
if (headA == null || headB == null)
return null;
// 2. 双指针遍历链表
ListNode pa = headA;
ListNode pb = headB;
// 3. 若指针到达链表尾部,则重置为另一个链表的头节点。
while (pa != pb){ // !若无公共节点,则会同时指向null,而不是陷入死循环
pa = pa == null ? headB : pa.next; // ! ?:的写法
pb = pb == null ? headA : pb.next;
}
return pa;
}
}
// 为什么示例1的结果不是1?
不熟悉的地方
2023/5/18
2024/1/18
2024/1/22 2024/3/14
输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
在节点 c1 开始相交。
示例 1:
分析 当两个链表的长度不确定时,我们想要同时遍历到两个链表的尾部,这时就可以使用双指针同时遍历两个链表。当一个指针到达链表末尾时,重新指向另一个链表的头节点。这样就能保证最终两个指针同时到达两个链表的尾部。