[链表] 力扣 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 <= 500 <= 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;
}
};

浙公网安备 33010602011771号