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; } };