• 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;
        }
    };
  • 相关阅读:
    html JS 开发备忘
    C++学习备忘(一)
    博客开通备忘
    自己制作的代码生成工具AutoCoder
    C# 小技巧
    突破list存为模板为10M限制
    开博
    OpenEuler中C语言中的函数调用测试
    socket测试3
    电子公文传输系统验收4开发基础
  • 原文地址:https://www.cnblogs.com/zzw-/p/13268270.html
Copyright © 2020-2023  润新知