力扣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;// 返回两人第一次相遇的地方
    }
相关推荐
JAVA面经实录9171 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
开源Z3 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode
旖-旎3 小时前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill
影视飓风TIM3 小时前
数据结构 | 链表超全笔记(单链表+双链表+高频算法题)
数据结构·笔记·链表
syagain_zsx4 小时前
STL 之 vector 讲练结合
c++·算法
MartinYeung55 小时前
[论文学习]DP2Unlearning:高效且具保证的大型语言模型遗忘框架(基于差分隐私的 LLM Unlearning 方法)
学习·算法·语言模型
Tian_Hang5 小时前
C++原型模式(Protype)
开发语言·c++·算法
bIo7lyA8v5 小时前
算法复杂度的渐进分析与实际运行时间的差异的技术8
算法
yuan199976 小时前
欧拉梁静力与屈曲计算的 MATLAB 实现(有限差分法 + 解析解)
开发语言·算法·matlab