剑指Offer34 寻找链表相同节点

作者: 北国雪WRG | 来源:发表于2019-01-11 13:08 被阅读0次

输入两个链表,找出它们的第一个公共结点。(公共节点是指节点的内存地址一样)

存在公共节点意味着公共节点后面的链表相同,此时链表的形状应是>----。需要注意的是

  1. 如果链表的长度相同,好说,直接遍历一趟就找到了。
  2. 如果链表的长度不同,我们就要先除去长出的那部分。

解决方法:

  1. 暴力法,求解两个链表的长度,把长的那部分去除掉再去找公共节点,链表遍历了三遍。

  1. 链表拼接:理解就是两个链表长度之和是一样的
    比如说:
    链表A:3-4-5
    链表B:9-8-7-4-5
    第一个公共节点是4,我们把两个链表拼接起来:
    A+B = 3-4-5-9-8-7-4-5
    B+A = 9-8-7-4-5-3-4-5
    可以看到,在合并后的链表依然会出现公共节点,并且位置一样。
    当然实际操作并不需要拼接。
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
    ListNode p1 = pHead1;
    ListNode p2 = pHead2;
    while(p1 != p2){
        p1 = (p1 == null ? pHead2 : p1.next);
        p2 = (p2 == null ? pHead1 : p2.next);
    }
    return p1;
}

如果链表的长度一样,一遍结束,否则遍历拼接部分

相关文章

  • 剑指Offer34 寻找链表相同节点

    输入两个链表,找出它们的第一个公共结点。(公共节点是指节点的内存地址一样) 存在公共节点意味着公共节点后面的链表相...

  • 反转链表

    题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后的链表的头节点。 摘抄资料:《剑指offer》[h...

  • 单向链表 添加、删除节点

    单向链表的节点定义 往链表的末尾添加一个节点 在链表中找到第一个含有某值的结点并删除该节点 摘抄资料:《剑指offer》

  • 剑指Offer笔试题(3)

    剑指Offer笔试题(2) 题目来源:牛客网 题目一 复杂链表的复制 描述: 输入一个复杂链表(每个节点中有节点...

  • 从尾到头打印链表

    《剑指offer》面试题6:从尾到头打印链表 题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。(链表...

  • 删除链表中重复的节点

    《剑指offer》面试题18:题目二:删除链表中重复的节点。 题目:在一个排序的链表中,如何删除重复的节点?例如,...

  • 链表数据结构

    链表数据结构 1· 删除链表的节点在O(1)时间内(18 剑指offer ) 解题思路 : 可以通过用下一个节点...

  • 刷题6 剑指 Offer — 链表

    剑指 Offer 18. 删除链表的节点 https://leetcode-cn.com/leetbook/rea...

  • 反转链表

    《剑指offer》面试题24:输入一个链表,反转链表后,输出新链表的表头。 思路:反转链表就是将链表中每一个节点的...

  • 每日一练(10):删除链表的节点

    title: 每日一练(10):删除链表的节点 categories:[剑指offer] tags:[每日一练] ...

网友评论

    本文标题:剑指Offer34 寻找链表相同节点

    本文链接:https://www.haomeiwen.com/subject/epqxdqtx.html