LeetCode 008 链表(一)系列

本文详细讲解了链表的基础操作,如删除特定元素的递归与迭代方法,链表的反转及其不同实现,以及高精度加法的链表表示和相加过程。通过实例演示和优化代码,帮助读者深入理解链表数据结构和相关算法。

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

链表(一)

大家好!我是小笙!征程栈与递归(一)让我尤为忧为揪心!我先做链表题推进进度,大家一起加油呀!!
在这里插入图片描述
链表(一)系列系题型如下

链表的删除(203,19)

203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

在这里插入图片描述
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50。

方法一:递归(MyCode)

链表的定义具有递归的性质,因此链表题目常可以用递归的方法求解
解题思路:
递归的终止条件是 head 为空,此时直接返回null。当 head 不为空时,递归地进行删除操作,然后判断head 的节点值是否等于 val 并决定是否要删除head。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
   
    public ListNode removeElements(ListNode head, int val) {
   
        if(head == null) return null;
        if(val<1 || val>50) return head;
        ListNode list = head;
        if(head.val != val){
    
            list.val = head.val;
            list.next = removeElements(head.next,val);
            return list;
        }else{
   
            list = removeElements(head.next,val);
            return list;
        }
    }
}
执行用时:1 ms, 在所有 Java 提交中击败了96.34%的用户
内存消耗:40.2 MB, 在所有 Java 提交中击败了5.04%的用户

// 上述代码可以优化 省略变量list链表创建和使用
class Solution {
   
    public ListNode removeElements(ListNode head, int val) {
   
        if (head == null) {
   
            return head;
        }
        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;
    }
}
方法二:迭代(Other’s Code)

核心算法
temp.next=temp.next.next

class Solution {
   
    public ListNode removeElements(ListNode head, int val) {
   
        ListNode dummyHead = new ListNode(0);  // 头节点 不存数据
        dummyHead.next = head;
        ListNode temp = dummyHead;
        while (temp.next != null) {
   
            if (temp.next.val == val) {
   
                temp.next = temp.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗念笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值