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;
        }
    };
  • 相关阅读:
    CentOs7-替换下载源
    CentOs7-常用命令
    Django Nginx+uwsgi 安装配置
    Linux操作系统下文件作用
    U盘创建macOS安装盘
    国内开源镜像站点汇总
    gcd常见用法
    mac rvm 升级 ruby 安装cocoapod 指定版本
    confluence 搭建 wiki 并破解
    homebrew 安装 java 指定版本
  • 原文地址:https://www.cnblogs.com/zzw-/p/13268270.html
Copyright © 2011-2022 走看看