zoukankan      html  css  js  c++  java
  • Intersection of Two Linked Lists(LIST-2 POINTER)

    Write a program to find the node at which the intersection of two singly linked lists begins.


    For example, the following two linked lists:

    A:         a1 → a2
                             ↘
                                c1 → c2 → c3
                             ↗
    B: b1 → b2 → b3
    begin to intersect at node c1.


    Notes:

    If the two linked lists have no intersection at all, return null.
    The linked lists must retain their original structure after the function returns.
    You may assume there are no cycles anywhere in the entire linked structure.
    Your code should preferably run in O(n) time and use only O(1) memory.

    FIRST TRY

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
            if(!headA || !headB) return NULL;
            int lenA = 0;
            int lenB = 0;
            ListNode* pA = headA;
            ListNode* pB = headB;
            while(pA->next)
            {
                lenA++;
                pA = pA->next; 
            }
            while(pB->next)
            {
                lenB++;
                pB = pB->next; 
            }
            if(pA == pB)
            {
                pA = headA;
                pB = headB;
                if(lenA > lenB)
                {
                    lenA -= lenB;
                    while(lenA-- > 0) pA = pA->next;
                }
                else if(lenA < lenB)
                {
                    lenB -= lenA;
                    while(lenB-- > 0) pB = pB->next;
                }
                while(pA!=pB)
                {
                    pA = pA->next;
                    pB = pB->next;
                }
                return pA;
            }
            else return NULL;
        }
    };

    Result: Accepted

  • 相关阅读:
    数据库范式
    java String.split()用法
    1.4 IoC控制反转
    利用shrinkwrap锁定依赖版本
    清晨开启电脑自动拉取项目更新
    JS如何获取屏幕、浏览器及网页高度宽度?
    Navigator 对象,能够清楚地知道浏览器的相关信息
    iconfont 转换为图标字体
    VS code的搜索、替换与正则替换
    点九图制作方法
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4229839.html
Copyright © 2011-2022 走看看