C++之相交链表(力扣热题100)

本文介绍了一个解决单链表相交节点查找问题的方法,利用两个指针分别遍历两个链表,当它们的内存地址首次相等时,找到的就是相交节点。如果不存在相交,则返回null。
摘要由CSDN通过智能技术生成

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

思考:

解题的关键点在于链表节点的内存地址相等,因此只要判断第一个内存地址相等的节点就是相交节点,而不用去考虑是第几个节点或者考虑如何确定值相同的非相交节点。

[4,1,8,4,5]

[5,6,1,8,4,5]

虽然同时包括了1,但是1不是相交节点,因此无法共享内存地址。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *head1 = headA;
        ListNode *head2 = headB;
        while(head1 != head2)
        {
            head1 = head1 != nullptr ? head1 ->next :headB;
            head2 = head2 != nullptr ? head2 ->next :headA;
        }
        return head1;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值