力扣hot100-链表

文章目录

概要

链表(Linked List)是数据结构中的一种,用于存储具有线性关系的数据。在链表中,每个元素称为一个节点(Node),每个节点包含两个部分:一个是数据域(存储数据),另一个是指针域(指向下一个节点)。链表的结构使得它在某些情况下比数组更加高效,特别是在插入和删除操作上。

链表的类型

  1. 单向链表(Singly Linked List):

    • 每个节点只有一个指向下一个节点的指针。
    • 头节点(Head)是链表的起点,尾节点(Tail)指向 null。
  2. 双向链表(Doubly Linked List):

    • 每个节点有两个指针,分别指向前一个节点和下一个节点。
    • 头节点的前指针和尾节点的后指针都指向 null。
  3. 循环链表(Circular Linked List):

    • 单向链表或双向链表的变种。
    • 尾节点的下一个指针指向头节点,形成一个循环。

题目:相交链表

原题链接:相交链表

题解

核心:其实就是让2个指针走一样的距离,消除步行差,那就一定可以一起走到相交点

因为两个链表如果相交,则它们从相交点到结尾的所有节点都是相同的。因此,我们让指针 p1 和 p2 分别遍历两个链表。如果 p1 到达链表 A 的末尾,则将其重定位到链表 B 的头部;同样地,如果 p2 到达链表 B 的末尾,则将其重定位到链表 A 的头部。这样,两指针最终会在相交点处相遇,即第一个共同节点,即为相交点。

java 复制代码
    public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode p1 = headA;
        ListNode p2 = headB;
        while (p1 != p2) {
            p1 = p1 == null ? headB : p1.next;
            p2 = p2 == null ? headA : p2.next;
        }
        return p1;
    }

评论区看到一个【还有句话:走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。】

java 复制代码
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode she = headA;
        ListNode he = headB;
        // 直到两人相遇
        while (she != he) {
            if (she != null) {
                she = she.next;// 如果她没走到尽头就一直走下去
            } else {
                she = headB;// 直到尽头也没遇见他,所以她去往他走过的路
            }
            if (he != null) {
                he = he.next;
            } else {
                he = headA;
            }
        }
        return he;// 返回两人第一次相遇的地方
    }
相关推荐
非优秀程序员3 小时前
第05章 播放器大战,暴风、快播与那一夜|《互联网产品恩仇录》
算法
文丑颜不良啊6 小时前
LeetCode2481~2500题目解析
java·leetcode
武子康10 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
文丑颜不良啊13 小时前
LeetCode2461~2480题目解析
java·leetcode
文丑颜不良啊14 小时前
LeetCode2441~2460题目解析
java·leetcode
文丑颜不良啊15 小时前
LeetCode2521~2540题目解析
java·leetcode
lisw0516 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
一起学安全技术16 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
Delightrs17 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust