题目
给你一个链表的头节点 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
题解思路如下:
如果不使用虚拟头节点时,那么删除头节点和删除后面的节点要分开判断并且操作.较为麻烦,所以我们之接new一个节点,并且让它指向头节点,当我们进行后续的删除操作就都是一样的了,需要注意的是,循环判断删除建议使用while,如果使用for这个循环条件有些难以把握。同时遍历判断的时候要建立一个零时指针来存放头结点的位置用它来遍历,防止虚拟头结点指向错误,最后返回时要记得释放内存,并且把虚拟头结点的下一个节点设置为头节点
具体代码如下:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
struct ListNode *virtualHead = new ListNode{ 0 };
virtualHead->next = head;struct ListNode* tempHead = virtualHead;
while (tempHead->next != NULL)
{
if (tempHead->next->val == val)
{
struct ListNode *temp=tempHead->next;
tempHead->next = tempHead->next->next;
delete temp;
}
else tempHead=tempHead->next;
}
head=virtualHead->next;
delete virtualHead;
return head;
}
};
标签:力扣,head,ListNode,val,tempHead,next,链表,移除,节点 From: https://blog.csdn.net/Moapsw033/article/details/137395891