zoukankan      html  css  js  c++  java
  • LeetCode160

    题目链接

    https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

    初次读题

    初次读题可知

    • 两个指针相同即需要求得的结果
    • 链表长度可能不同
    • 两个链表可能没有交叉点,此时返回NULL
    • 不可修改链表结构
    • 链表中无循环

    我第一次读题时看的是英文版,并且我刚开始做LeetCode对题目风格也不熟悉,同时这道题的Example也是很神奇,我一下子没有理解题意,看了中文版的题目和题解后才明白这个题是怎么做的。

    注意点

    根据这道题的代码模板和最终答案可知,最终我们需要找到交叉结点的指针。

    在Example1中,val为1的两个结点虽然内容相同,但不是交叉点,因为交叉点的定义是同时存在于两个链表中。

    题解一

    思路

    假如两个链表有交叉点(intersection),则可以设两个链表彼此不重复的结点个数分别为d1和d2,重复的结点个数为d。如果一个链表遍历完则使其从另外一个链表的头部重新开始,这样形成一个式子:d1+d+d2=d2+d+d1

    假如两个链表没有交叉点,这也只是d=0的一个特例,因此只要实现上述思路即可。

    关于思路,可以看看这个题的一个视频题解:

    https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/lian-biao-xiang-jiao-shuang-zhi-zhen-onshi-jian-fu/

    代码

    // Problem: Leetcode 160
    // URL: https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
    // Tags: Linked List
    // Difficulty: Easy
    
    #include <iostream>
    using namespace std;
    
    struct ListNode{
        int val;
        ListNode* next;
        ListNode(int x):val(x),next(NULL){}
    };
    
    class Solution{
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB){
            // Deal with the border "nullptr"
            if (nullptr==headA || nullptr==headB)
            {
                return nullptr;
            }
            ListNode *ptrA = headA;
            ListNode *ptrB = headB;
            
            // d1+d+d2=d2+d+d1
            while (ptrA != ptrB){
                ptrA = nullptr == ptrA ? headB : ptrA->next;
                ptrB = nullptr == ptrB ? headA : ptrB->next;
            }
            return ptrA;
        }
    };
    
    int main()
    {
        // system("pause");
        return 0;
    }
    

    题解二

    也看到有人讲这个思路:

    遍历链表A并将每个结点的指针存入set,然后遍历链表B并判断每个结点指针是否存在于set中。


    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    js面试题-----算法类
    js面试题-----安全类
    js面试题-----通信类
    js面试题-----面向对象类
    js面试题-----HTTP协议类
    js面试题-----CSS盒模型
    Java-JVM 类的初始化
    加密的相关基础
    AngularJS-directive.js 基本指令
    AngularJS-liveRoomDirective.js 直播间指令
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13281937.html
Copyright © 2011-2022 走看看