美文网首页
剑指 Offer 52 两个链表的第一个公共节点

剑指 Offer 52 两个链表的第一个公共节点

作者: itbird01 | 来源:发表于2021-12-26 22:30 被阅读0次
    题目.png

    题意:输入两个链表,找出它们的第一个公共节点。

    解题思路

    解法1:
    1.刚开始看题,很容易被绕晕,明明看用例,第一个是1相同,为什么用例结果是8呢?经过仔细看题分析,发现说的是内存地址和val都相同,所以这样的话,问题就很简单了
    2.最简单的解法,双层while循环,我们针对于headA每个节点,去遍历headB,是否节点相等(注意此处是指headA == headB),如果存在这样的节点,则直接返回
    解法2:
    我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。
    这样,当它们相遇时,所指向的结点就是第一个公共结点。

    解题遇到的问题

    后续需要总结学习的知识点

    ##解法1
    public class Solution {
        public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            while (headA != null) {
                ListNode temp = headB;
                while (temp != null) {
                    if (headA == temp) {
                        return headA;
                    }
                    temp = temp.next;
                }
                headA = headA.next;
            }
            return null;
        }
    
        public class ListNode {
            int val;
            ListNode next;
            ListNode(int x) {
                val = x;
                next = null;
            }
        }
    }
    
    ##解法2
    public class Solution {
        public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            ListNode pa = headA, pb = headB;
            while (pa != pb) {
                pa = pa == null ? headB : headA.next;
                pb = pb == null ? headA : headB.next;
            }
            return pa;
        }
    
        public class ListNode {
            int val;
            ListNode next;
            ListNode(int x) {
                val = x;
                next = null;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指 Offer 52 两个链表的第一个公共节点

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