zoukankan      html  css  js  c++  java
  • LeetCode 160 相交链表

    LeetCode 160 相交链表

    题目描述:
    编写一个程序,找到两个单链表相交的起始节点。

    执行用时:2 ms, 在所有 Java 提交中击败了28.55%的用户
    内存消耗:42.5 MB, 在所有 Java 提交中击败了71.52%的用户

    构造成环

    public class Solution {
        public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            //边界条件
            if(headA==null || headB==null) {
                return null;
            }
            //构造成环
            ListNode tail = headA;
            while(tail.next!=null) {
                tail = tail.next;
            }
            tail.next = headA;
    
            //判断有无环
            ListNode p1 = (headB!=null)?headB.next:headB;
            ListNode p2 = (p1!=null)?p1.next:p1;
            while(p1!=null && p2!=null && p1!=p2) {
                //慢指针
                p1 = (p1!=null)?p1.next:p1;
                //快指针
                p2 = (p2!=null)?p2.next:p2;
                p2 = (p2!=null)?p2.next:p2;
            }
    
            //寻找相遇位置
            if(p1!=null && p2!=null) {
                p1 = headB;
                while(p1!=p2) {
                    p1 = (p1!=null)?p1.next:p1;
                    p2 = (p2!=null)?p2.next:p2;
                }
            }
    
            //断开环
            tail.next = null;
    
            return p2;
        }
    }
    
  • 相关阅读:
    因特网中和多媒体有关的协议
    进程与线程
    线程模型
    SMP PVP Cluster
    读写者
    回调函数
    环境变量
    堆与栈的区别
    操作系统中的同步、异步、阻塞和非阻塞
    Razor潜入2令人疑惑的LocateOwner方法
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13533709.html
Copyright © 2011-2022 走看看