题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNodeV1(ListNode pHead1, ListNode pHead2) {
        Deque<ListNode> queue = new LinkedList<>();

        while (pHead1  != null) {
            queue.add(pHead1);
            pHead1 = pHead1.next;
        }

        while (pHead2 != null) {
            if (queue.contains(pHead2)) {
                return pHead2;
            }
            pHead2 = pHead2.next;
        }

        return null;
    }

    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        int lengthA = 0;
        int lengthB = 0;
        ListNode pHeadA = pHead1;
        ListNode pHeadB = pHead2;
        while (pHeadA != null) {
            pHeadA = pHeadA.next;
            lengthA++;
        }

        while (pHeadB != null) {
            pHeadB = pHeadB.next;
            lengthB++;
        }

        pHeadA = pHead1;
        pHeadB = pHead2;

        //长的链表先走
        if (lengthA > lengthB) {
            for (int i = 0; i < lengthA - lengthB; i++) {
                pHeadA = pHeadA.next;
            }
        } else {
            for (int i = 0; i < lengthB - lengthA; i++) {
                pHeadB = pHeadB.next;
            }
        }

        //同时向前移动指针,直到相等。若到尾节点,则没有相同的。
        while (pHeadA != pHeadB) {
            pHeadA = pHeadA.next;
            pHeadB = pHeadB.next;
        }

        return pHeadA;
    }
}

全部评论

相关推荐

owwhy:难,技术栈在嵌入式这块显得非常浅,并且简历有大问题。教育经历浓缩成两行就行了,写什么主修课程,说的不好听这块没人在意,自我评价删了,项目写详细点,最终简历缩成一页。相关技能怎么说呢,有点差了,还写成这么多行
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务