题目描述
leetcode203:
给你一个链表的头节点 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.删除的节点为头结点:
while(head !=NULL &&head->val == val)
//头结点为空的话那么就不存在删除头结点一说了
//指向头结点的指针和头结点的值都不能是空值
{
ListNode *replace = head;
//创造指向头指针的指针replace用以替代头指针
head = head->next;
//原来的头指针指向后一个节点
delete replace;
//删除最初的那个头指针从而实现删除最初的头结点
}
2.删除的节点为非头结点
ListNode * cur = head;
//创建一个cur指针指向head
while(cur !=NULL && cur->next!=NULL )
//删除非头结点的条件是:
//头指针不能为空且后面节点指针也不能为空
{
if( cur->next ->val == val)
//cur指针指向的下一个节点的值 ==val
{
ListNode *tmp = cur->next;
//创建tmp指针用来替代要删除的节点的指针
cur->next = cur->next->next;
//将cur的下一个节点设置为cur的下一个节点的下一个节点
//即删除了原来cur的下一个节点。
// cur->next被删除
delete tmp;
//删除 值==val的节点
}else
{
cur = cur ->next;
//否则cur继续指向下一个节点接着变量链表
}
!!最后要返回head才能有输出!!
代码
class Solution
{
public:
ListNode* removeElements(ListNode* head, int val)
{
//1.第一种情况删除头结点
while(head !=NULL &&head->val == val)
{
ListNode *replace = head;
head = head->next;
delete replace;
}
//2.第二种情况删除其他节点
ListNode * cur = head;
while(cur !=NULL && cur->next!=NULL )
{
if(cur->next->val == val)
{
ListNode *tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
}else
{
cur = cur ->next;
}
// return head;
}
return head;
}
};