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;
    }
};
相关文章
|
4月前
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
|
JavaScript
用nodejs实现向文件的固定位置插入内容
用nodejs实现向文件的固定位置插入内容
107 0
|
机器学习/深度学习 异构计算 Python
接上篇文章,如果是将param的梯度取出放在列表中呢?
同样,如果您想将神经网络参数的梯度添加到Python列表中,您需要先确保将其从GPU内存中转移回主机内存中。这可以通过使用cpu()方法将梯度从GPU移回CPU内存,然后使用tolist()方法将其转换为Python列表来实现。例如:
SwiftUI—如何调整记录在List列表里的顺序
SwiftUI—如何调整记录在List列表里的顺序
264 0
SwiftUI—如何调整记录在List列表里的顺序
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
320 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
217 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(二)
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
290 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(一)
|
Windows
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
140 0
【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )(三)
|
存储 JavaScript
HOT100——删除链表的倒数第N个节点(JS实现)
HOT100——删除链表的倒数第N个节点(JS实现)
139 0
HOT100——删除链表的倒数第N个节点(JS实现)
|
JavaScript
HOT100——合并K个升序链表(JS实现)
HOT100——合并K个升序链表(JS实现)
165 0
HOT100——合并K个升序链表(JS实现)