给你一个链表的头节点 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
代码:
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *prev,*node;
prev=head;
node=head;
while(node!=NULL)
{
if(node->val==val)
{
//每一次循环都要判断是否删除的是头结点
if(node==head) head=head->next;//删除头结点的情况
else prev->next=node->next;
}
node=node->next;//无论是否删除,当前指针都要往后移动
if(prev->next!=node&&prev!=node)//保证prev节点一定时紧挨着node的前一位
prev=prev->next;
}
return head;
}