• 两链表第一个公共节点


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

    思路:先求两个链表的长度,求长度差n,让长的那个链表先走n,两个链表再同时走,直到指针指到相同节点。

    更简洁的答案:(实际上时间复杂度并没有减少,遍历的次数也没有减少,只是答案简洁)

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) return null;
        ListNode pA = headA, pB = headB;
        while (pA != pB) {
            pA = pA == null ? headB : pA.next;
            pB = pB == null ? headA : pB.next;
        }
        return pA;
    }
    
    作者:user7208t
    链接:https://leetcode-cn.com/problems/two-sum/solution/tu-jie-xiang-jiao-lian-biao-by-user7208t/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            if(pHead1==null||pHead2==null) return null;
                 int n=0,m=0,cha=0;
            ListNode r1=pHead1,r2=pHead2;
            while(r1!=null){
                n++;
                r1=r1.next;
            }
            
            while(r2!=null){
                m++;
                r2=r2.next;
            }
            if(n>=m){
                cha=n-m;
                while(cha-->0){
                    pHead1=pHead1.next;
                }
                while(pHead1!=pHead2){
                    pHead1=pHead1.next;
                    pHead2=pHead2.next;
                }
               
            }else{
                cha=m-n;
                while(cha-->0){
                    pHead2=pHead2.next;
                }
                while(pHead1!=pHead2){
                    pHead1=pHead1.next;
                    pHead2=pHead2.next;
                }
            }
            return pHead1;
        }
  • 相关阅读:
    Linux驱动学习之驱动开发准备工作
    Linux驱动学习之什么是驱动?
    gslX680驱动的移植实践
    I2C总线驱动框架详解
    Linux内核中断学习
    USB之基本协议和数据波形1
    kernel 进阶API
    内核mailbox
    内核ring buffer -- kfifo
    Linux V4L2之camera
  • 原文地址:https://www.cnblogs.com/team42/p/6684987.html
Copyright © 2020-2023  润新知