【代码随想录】LC 203.移除链表元素

文章目录

前言

本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。

一、题目

1、原题链接

203.移除链表元素

2、题目描述

二、解题报告

1、思路分析

  1. 链表删除元素核心思路就是:找到要删除元素的前一个节点;将该节点直接指向待删除元素的后一个节点即可
  2. 需要注意的是:头节点的删除与其他节点的删除操作可能不同,即删除头节点只要将头节点后移一位,将原来的头节点内存空间释放即可。
  3. 为了统一操作,可以引入虚拟头节点 :在原链表头节点之前添加一个节点作为虚拟头节点(虚拟头节点指向原链表的头节点 ),不作为原链表的元素,只是为了方便,统一链表节点的删除操作
  4. 需要注意的一点是:不能直接使用头节点(虚拟头节点)来作为遍历节点 ,需要创建一个临时新的节点来替代头节点进行链表遍历,因为最终需要返回链表,所以头节点(虚拟头节点)的指针域不能被修改(返回的就是头节点,根据头节点来找到删除后的结果链表)。

2、代码详解

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* fakehead = new ListNode(0, head); // 虚拟头节点 指向原链表的头结点
        ListNode* cur = fakehead; // cur充当遍历指针
        while(cur->next != NULL) { // 因为后续要取cur->next->val,所以条件为非空,避免空指针操作
            if (cur->next->val == val) {  //删除操作
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            }
            else { //遍历到下一个节点
                cur = cur->next;
            }
        }
        //返回真正的头节点,注意不能直接返回head,因为head可能已被删除
        head = fakehead->next; 
        delete fakehead;
        return head;
    }
};

三、知识风暴

  • 使用虚拟头节点统一删除链表节点的操作;
  • ListNode* node = new ListNode();(好久不写C++代码了,都忘了创建对象需要new了)
相关推荐
Beyond_System|系统之外16 分钟前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
景熙552338 分钟前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
汉克老师1 小时前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood2 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz2 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕2 小时前
进一步了解模板
c++
叠层归一研究院3 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
Selvaggia4 小时前
Diffusion Model 的基本原理与模型架构
算法
汉克老师5 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6666 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树