[链表] 力扣 203. 移除链表元素
给你一个链表的头节点
head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
示例 1:

输入: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
复习链表#
来自链接的整理
1、初始化一个空结点,没有复制,指针指向list
ListNode list=new ListNode();
2、初始化一个空结点,初始值为0,指针指向为list
ListNode list=new ListNode(0);
3、初始化一个空结点,初始赋值为0,并且list
的下一个next
指针指向head
,指针指向为list
ListNode list=new ListNode(0,head);
4、定义一个空链表
ListNode list=null;
通常定义一个空结点需要有结点的next指针指向,否则,只是定义一个空结点
通常使用以下两种方法:
ListNode list=new ListNode(0,head);
或者
ListNode list=new ListNode(0);
list.next=head;
题解#
链表的基本操作:
- 使用指针
p
遍历链表:while(p->next!=NULL){p=p->next;}
- 指针
p
删除当前指向的元素:p->next=p->next->next
本题中因为head
头节点可能被删除,所以创建空结点指向head
,处理后直接返回空结点的next
代码
/**
* 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) {
//初始化一个空结点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list
struct ListNode* list=new ListNode(0,head);
struct ListNode* p=list;//指针p往前走
while(p->next!=NULL){
if(p->next->val==val){
p->next=p->next->next;
}
else{
p=p->next;
}
}
return list->next;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步