hot100 打开链表的另一种方式

简介: hot100 打开链表的另一种方式

给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构

题为leetcode160

思路:

第一种,用哈希表,先遍历A链表,将所有节点指针存入哈希表,然后遍历B链表,有一样的指针返回该指针,否则返回nullptr。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *A=headA;
        unordered_set<ListNode *> visited;
        while(A!=nullptr){
            visited.insert(A);
            A=A->next;
        }
        A=headB;
        while(A!=nullptr){
            if(visited.count(A))return A;
            A=A->next;
        }
        return nullptr;
 
    }
};

第二种:


步骤:


  1. 每步操作需要同时更新指针 A 和 B。
  2. 如果指针 A 不为空,则将指针A 移到下一个节点;如果指针 B 不为空,则将指针 B 移到下一个节点。
  3. 如果指针 A 为空,则将指针 A 移到链表 headB 的头节点;如果指针B 为空,则将指针 B 移到链表 headA 的头节点。
  4. 当指针 A 和 B 指向同一个节点或者都为空时,返回它们指向的节点或者 null

结合上面步骤演示一遍,题解很妙借鉴leetcode官方,也可以看下图,最终都指向了同一节点。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *A,*B;
        if(headA==nullptr||headB==nullptr)return nullptr;
        A=headA,B=headB;
        while(A!=B){
            A=A==nullptr?headB:A->next;
            B=B==nullptr?headA:B->next;
        }
        return A;
    }
};
相关文章
|
10月前
|
JSON JavaScript 数据格式
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
65 1
|
JavaScript
用nodejs实现向文件的固定位置插入内容
用nodejs实现向文件的固定位置插入内容
101 0
|
存储 人工智能 Java
第一个动态结构:链表
大家好,我是王有志。今天我们一起学习线性表中的第二种数据结构:链表,也是真正意义上的第一个动态数据结构。
103 0
第一个动态结构:链表
|
Java
java数据结构20:Big Bang(链表的插入、删除、遍历和查找)
学习累了的时候看看一集二十分钟左右的《生活大爆炸》也不失为一种乐趣。在剧中Sheldon可以说是一个极品,真不知Leonard是如何忍受这位极品室友成天的唠叨。
86 0
网页|打开IDLE,实现列表元素的增删
网页|打开IDLE,实现列表元素的增删
42 0
SwiftUI—如何调整记录在List列表里的顺序
SwiftUI—如何调整记录在List列表里的顺序
252 0
SwiftUI—如何调整记录在List列表里的顺序
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
132 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
206 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
276 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
298 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )