zoukankan      html  css  js  c++  java
  • 剑指offer三十六之两个链表的第一个公共结点

    一、题目

      输入两个链表,找出它们的第一个公共结点。

    二、思路

      如果存在共同节点的话,那么从该节点,两个链表之后的元素都是相同的。也就是说两个链表从尾部往前到某个点,节点都是一样的。我们可以用两个栈分别来装这两条链表。一个一个比较出来的值。找到第一个相同的节点。

    三、代码

    /*
      思路: 如果存在共同节点的话,那么从该节点,两个链表之后的元素都是相同的。
            也就是说两个链表从尾部往前到某个点,节点都是一样的。
            我们可以用两个栈分别来装这两条链表。一个一个比较出来的值。
            找到第一个相同的节点。*/
    
    import java.util.Stack;
    
    public class Solution {
    
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            if (pHead1 == null || pHead2 == null) {
                return null;
            }
    
            Stack<ListNode> stack1 = new Stack<>();
            Stack<ListNode> stack2 = new Stack<>();
    
            while (pHead1 != null) {
                stack1.push(pHead1);
                pHead1 = pHead1.next;
            }
    
            while (pHead2 != null) {
                stack2.push(pHead2);
                pHead2 = pHead2.next;
            }
    
            ListNode commonListNode = null;
    
            while (!stack1.isEmpty() && !stack2.isEmpty() && stack1.peek() == stack2.peek()) {
                stack2.pop();
                commonListNode = stack1.pop();
            }
    
            return commonListNode;
        }
    }
    View Code

    ---------------------------------------------

    参考链接:

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

  • 相关阅读:
    洛谷 P1048 采药
    一本通 1267:【例9.11】01背包问题
    一本通 1265:【例9.9】最长公共子序列
    一本通 1282:最大子矩阵
    一本通 1285:最大上升子序列和
    一本通 1284:摘花生
    一本通 1283:登山
    一本通 1264:【例9.8】合唱队形
    洛谷 P1126 机器人搬重物
    洛谷P1522 牛的旅行 Cow Tours
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7655764.html
Copyright © 2011-2022 走看看