【LeetCode】160 相交链表

题目描述

原题链接
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构

成绩

image.png

解题思路

初始化两个 “指针变量”:headAIndex 指针指向 A 链表的头节点,headBIndex 指针指向 B 链表的头节点。
同时用 headAIndex 指针 和 headBIndex 分别对 A 链表和 B 链表进行遍历。当 headAIndex 遍历完 A 后,将其指向 B 链表的头节点,然后开始用 headAIndex 遍历 B 链表;当 headAIndex 遍历完 B 后,将其指向 A 链表的头节点,然后开始用 headBIndex 遍历 A 链表。
当 headAIndex 指向的内容后 headBIndex 指向的内容一致时,后返回它们共同指向的内容:

  • headAIndex == null && headBIndex == null,返回 null。
  • headAIndex == headBIndex && headAIndex != null,返回指向的节点。

代码实现

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode headAIndex = headA;
        ListNode headBIndex = headB;
        while (true) {
            if (headBIndex == headAIndex) {  // 找到两个链表的相交节点
                return headAIndex;
            }
            headAIndex = headAIndex.next;
            headBIndex = headBIndex.next;
            if (headAIndex == null && headBIndex == null) {  // 两个链表没有相交节点
                return null;
            }
            if (headAIndex == null) {
                headAIndex = headB;
            }
            if (headBIndex == null) {
                headBIndex = headA;
            }
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值