0

0

单链表 push 方法实现详解:理解 head 和 tail 的关系

碧海醫心

碧海醫心

发布时间:2025-09-25 20:11:21

|

496人浏览过

|

来源于php中文网

原创

单链表 push 方法实现详解:理解 head 和 tail 的关系

单链表 push 方法的实现,着重讲解 head 和 tail 指针在插入新节点时的作用和相互影响。通过代码示例,深入理解为什么修改 tail.next 会影响 head.next,以及如何正确更新 tail 指针,确保链表的正确性。最终提供一个清晰、易懂的 push 方法实现,帮助读者掌握单链表的基本操作。

单链表结构

在深入 push 方法之前,我们先来了解一下单链表的基本结构。一个单链表由一系列节点组成,每个节点包含一个值 (val) 和一个指向下一个节点的指针 (next)。链表本身维护两个关键指针:head 指向链表的第一个节点,tail 指向链表的最后一个节点。

class Node {
    constructor(val) {
        this.val = val;
        this.next = null;
    }
}

class SinglyLinkedList {
    constructor() {
        this.head = null;
        this.tail = null;
        this.length = 0;
    }
}

push 方法的实现

push 方法的作用是在链表的末尾添加一个新的节点。其核心逻辑在于正确处理 head 和 tail 指针,特别是当链表为空时,以及当链表非空时。

以下是一个清晰、易懂的 push 方法实现:

class Node {
    constructor(val) {
        this.val = val;
        this.next = null;
    }
}

class SinglyLinkedList {
    constructor() {
        this.head = null;
        this.tail = null;
        this.length = 0;
    }
    push(val) {
        let newNode = new Node(val);
        if (!this.head) {
            this.head = newNode;
        }
        if (this.tail) {
          this.tail.next = newNode;
        }
        this.tail = newNode;
        this.length++;
        return this;
    }
}

代码解释:

  1. 创建新节点: 首先,创建一个新的 Node 实例,其值为传入的 val。
  2. 处理空链表: 如果链表为空(this.head 为 null),则将 head 指向新节点。
  3. 处理非空链表: 如果链表非空(this.tail 存在),则将当前 tail 的 next 指针指向新节点,相当于将新节点添加到链表末尾。
  4. 更新 tail 指针: 无论链表是否为空,都需要将 tail 指针指向新节点,因为新节点现在是链表的最后一个节点。
  5. 更新长度: 链表的长度 length 加 1。
  6. 返回链表: 返回链表本身,方便链式调用。

理解 head 和 tail 的关系

head 和 tail 指针分别指向链表的第一个和最后一个节点。当链表中只有一个节点时,head 和 tail 指向同一个节点。

图星人
图星人

好用的AI生图工具,百万免费商用图库

下载

当向链表添加新节点时,tail.next 的改变会影响 head.next,是因为它们都指向同一个内存地址。在上面的例子中,this.tail.next = newNode; 这行代码实际上是在修改 tail 所指向的节点的 next 属性,使其指向 newNode。如果 tail 最初指向的节点也是 head 指向的节点,那么 head.next 也会随之改变。

示例

let list = new SinglyLinkedList()

list.push(1)
list.push(2)

console.log(list);

输出结果:

{
  head: {
    val: 1,
    next: { val: 2, next: null }
  },
  tail: { val: 2, next: null },
  length: 2
}

可以看到,head 指向值为 1 的节点,其 next 指向值为 2 的节点,而 tail 指向值为 2 的节点,这正是我们期望的结果。

注意事项

  • 在操作链表时,务必注意处理空链表的情况,避免出现空指针错误。
  • 正确更新 tail 指针是维护链表结构的关键,否则可能导致链表断裂或循环引用。
  • 理解指针的本质,即存储的是内存地址,有助于理解 head 和 tail 之间的关系。

总结

push 方法是单链表最基本的操作之一。理解其实现原理,特别是 head 和 tail 指针的作用,对于掌握链表数据结构至关重要。通过本文的讲解和示例,相信读者能够更好地理解和应用单链表。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

234

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

437

2024.03.01

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

536

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

24

2026.01.06

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

923

2023.09.19

空指针异常处理
空指针异常处理

本专题整合了空指针异常解决方法,阅读专题下面的文章了解更多详细内容。

22

2025.11.16

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

42

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

46

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 19万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号