【代码随想录训练营】【Day03】第二章|链表|链表理论基础|203.移除链表元素|707.设计链表|206.反转链表

文章介绍了链表的基本概念,包括其节点结构和与数组的区别。讨论了在Java中如何移除链表元素,并提供了两种不同的实现方式,强调了代码可读性的考虑。此外,提到了设计链表和反转链表的LeetCode题目,分别阐述了使用栈和递归解题的思路。文章指出,尽管链表在某些操作上具有优势,但在实际应用中并不如数组常见,且其性能优势在实际场景中可能不明显。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表理论基础

链表的结构类似于一串珠子,每一颗珠子就相当于链表上的一个节点;每一个节点则由数据域和指针域构成,数据域用于存放数据,指针域用于指向其它一个节点或空节点(链表尾部)。

链表与数组的主要区别在于:

  • 数组是在内存中是连续分布的,但是链表在内存中不是连续分布的
  • 数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。
  • 链表的长度是不固定的,可以进行动态增删, 适合数据量不固定,频繁增删,较少查询的场景。

更多有关链表的理论基础可查阅:《代码随想录》链表理论基础


203.移除链表元素

题目详细:LeetCode.203

在Java中,想要对链表中某一节点进行移除操作,只要将被移除节点的前一个节点的next指针域,指向被移除节点的下一个节点。

由题可知,输入的链表是一个单链表,所以我们需要:

  • 定义一个虚拟头节点,其指针域指向链表头head,在定义时传递的head是值传递,所以后面我们对head进行任何操作都不会影响该节点始终指向链表头。
  • 定义一个指针始终指向当前节点的上一个节点,才能在找到被移除节点时,将上一个节点的指针域指向被移除节点的下一个节点,以此来完成移除链表元素的操作。
class Solution {
   
   
    public ListNode removeElements(ListNode head, int val) {
   
   
        ListNode ans = new ListNode(0, head);
        // 这里多定义了一个节点指针p来遍历链表,可以提高代码的可阅读性。
        ListNode p = head, pre =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值