zoukankan      html  css  js  c++  java
  • 两个链表的第一个公共结点

    题目描述

    输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

    题目解析

    用两个指针扫描”两个链表“,最终两个指针到达 null 或者到达公共结点。

    长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL
    长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点;没有公共,一起到结尾NULL。

    题目解答

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        ListNode l1 = pHead1, l2 = pHead2;
        while (l1 != l2) {
            l1 = (l1 == null) ? pHead2 : l1.next;
            l2 = (l2 == null) ? pHead1 : l2.next;
        }
        return l1;
        }
    }
    

    题目解析

    通过栈去模拟从链表的尾部往前遍历两个链表的重合的部分,找到最左侧重合点即可

    题目解答

    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            Stack<ListNode> stack1 = new Stack<>();
            Stack<ListNode> stack2 = new Stack<>();
    
            while (pHead1 != null) {
                stack1.add(pHead1);
                pHead1 = pHead1.next;
            }
            while (pHead2 != null) {
                stack2.add(pHead2);
                pHead2 = pHead2.next;
            }
            ListNode ans = null;
            while (!stack1.isEmpty() && !stack2.isEmpty()) {
                if(stack1.peek().val == stack2.peek().val) {
                    ans = stack1.peek();
                    stack1.pop();
                    stack2.pop();
                } else {
                    break;
                }
            }
            return ans;
        }
    
  • 相关阅读:
    【MVC 1】MVC+EF实体框架—原理解析
    数据结构导论(一)
    【JavaScript 14—学习总结】:从小事做起
    【JavaScript 13—应用总结】:锁屏遮罩
    【JavaScript 12—应用总结】:弹出登录框
    【JavaScript 11—应用总结】:下拉菜单
    【JavaScript 10—应用总结】:连缀
    【EF 1】EF实体框架 原理+实例
    【多 线 程】
    【命 令 行】
  • 原文地址:https://www.cnblogs.com/yzhengy/p/13293996.html
Copyright © 2011-2022 走看看