zoukankan      html  css  js  c++  java
  • LeetCode 面试题02.07. 链表相交

    思路描述:首先如果两个链表相交,则它们第一个交点之后的节点必然相交,即从首个交点之后两链表就重合了,原因为每个节点只能指向一个节点,因此相交形状一定为Y型不可能为X。

    对于此题如果仅判断是否相交,我们可以之间遍历到最后一个节点,判断是否相同,相同相交,否则为不相交。但此题要求返回相交的首个节点,因此可以首先求出两个链表的长度差,让长的链表

    先开始前进到两链表长度相等,然后开始双方同步遍历,寻找是否存在相同节点,此时找到的第一个节点即为相交的第一个节点。

    具体LeetCode代码如下:

    /**
     * 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) {
            ListNode *hA=headA;
            ListNode *hB=headB;
            int l1=0,l2=0;
            while(hA){
                l1++;
                hA=hA->next;
            }
            while(hB){
                l2++;
                hB=hB->next;
            }
            int sub;
            if(l1>l2){
                sub=l1-l2;
                while(sub){
                    headA=headA->next;
                    sub--;
                }
            }
            else{
                sub=l2-l1;
                while(sub){
                    headB=headB->next;
                    sub--;
                }
            }
            while(headA){
                if(headA==headB){
                    return headA;
                }
                headA=headA->next;
              
                headB=headB->next;
            }
            return NULL;
        }
    };
  • 相关阅读:
    体验一下:AndroidX
    Android研发技术的进阶之路
    App 冷启动与热启动及启动白屏优化
    Android Q 正式命名为 Android 10
    Android开发学习路线的七个阶段和步骤
    安卓旅途之——开发数独(一)
    项目总结
    小组互评与自评
    典型用户与场景
    第二个Sprint计划
  • 原文地址:https://www.cnblogs.com/zzw-/p/13268270.html
Copyright © 2011-2022 走看看