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

    题目描述

    输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
    如果两个有公共结点 那么从这个公共结点往后的所有结点都是一样的
    方法一:借用栈(相当于从后往前找) 找第一个不相同的点之前的点
    import java.util.*;
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            Stack<ListNode> s1=new Stack<>();
            Stack<ListNode> s2=new Stack<>();
            while (pHead1 != null){
                s1.push(pHead1);
                pHead1=pHead1.next;
            }
            while (pHead2 != null){
                s2.push(pHead2);
                pHead2=pHead2.next;
            }
            ListNode result=null;
            while (!s1.isEmpty() && !s2.isEmpty() && s1.peek() ==s2.peek()){
                s1.pop();
                result =s2.pop();
            }
            return  result;
        }
    }

    方法2:用两个指针同时往后走 最终两个指针到达相同的结点或者同时到达null

    如果两个数组长度相同 第一遍直接找到或者找不到;

    如果两个数组长度不相同 第一遍结束的时候两个pHead会在同一位置开始往后找 相当于长度相同的数组

    import java.util.*;
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            if(pHead1 == null || pHead2 == null){
                return  null;
            }
            ListNode l1=pHead1,l2=pHead2;
            while(pHead1 != pHead2){
                if(pHead1 != null) pHead1 = pHead1.next;
                else pHead1=l1;
                if(pHead2 != null) pHead2 = pHead2.next;
                else  pHead2=l2;
            }
            return pHead1;
        }
    }
  • 相关阅读:
    robotframework笔记9
    robotframework笔记8
    Spring预处理
    WebStrom快捷键
    json死循环问题
    java线程与缓存
    oss文件删除策略
    Eclipse自动编译问题
    将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)
    将 JAR 转为 EXE – JSMOOTH 的使用教程(第二期)(转载)
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12443658.html
Copyright © 2011-2022 走看看