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

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

    思路

    快慢指针,链表长度不同时抵消掉多余的长度。
    若链表长度不同,则一定时在长链表的链尾相遇。
    时间复杂度O(n),空间复杂度O(1)。

    代码

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            if(pHead1 == null || pHead2 == null)    return null;
            ListNode p1 = pHead1;
            ListNode p2 = pHead2;
            while(p1 != p2) {
                // 判断的位置和处理比较关键,整个循环过程两个指针的间隔并不是全程不变的。
                p1 = p1 == null ? pHead2 : p1.next;
                p2 = p2 == null ? pHead1 : p2.next;
            }
            return p1;
        }
    }
    

    笔记

    链表长度不同时,会有两次指针换链,每次换链时会导致正在换链的指针慢一步,各换链一次则步数抵消,且相遇时是在短链表的链首。

  • 相关阅读:
    tcp socket http(复制的)
    cas php
    占用字节
    网络基础
    Mbps MB/S Mb/s
    path_info和get_full_path()的区别
    rbac权限管理
    ORM _meta
    Django SQLite3的使用
    url的分发
  • 原文地址:https://www.cnblogs.com/ustca/p/12361201.html
Copyright © 2011-2022 走看看