leetcode 203.移除链表元素
大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。
题目描述
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点
题解
遍历节点,如果当前节点的下一个节点的元素是要删除的元素则将当前节点的指针指向下个节点的指针指向
/*
* @lc app=leetcode.cn id=203 lang=cpp
*
* [203] 移除链表元素
*/
// @lc code=start
/**
* 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)
{
//删除头节点的元素
while (head != NULL && head->val == val)
{
ListNode *temp = head;
head = head->next;
delete temp;
}
//删除非头节点的部分
ListNode *index = head;
while (index != NULL && index->next != NULL)
{
if (index->next->val == val)
{
ListNode *temp = index->next;
index->next = temp->next;
delete temp;
}
else
{
index = index->next;
}
}
return head;
}
};
// @lc code=end
题解二
使用虚头节点来遍历链表
在头节点之前再添加一个节点,以添加的节点作为头节点遍历
/*
* @lc app=leetcode.cn id=203 lang=cpp
*
* [203] 移除链表元素
*/
// @lc code=start
/**
* 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)
{
//虚头节点
ListNode *vir = new ListNode(0);
vir->next = head;
ListNode *index = vir;
//遍历链表
while (index->next != NULL)
{
//如果遇到删除的元素则移动元素
if (index->next->val == val)
{
ListNode *temp = index->next;
index->next = temp->next;
delete temp;
}
else
{
index = index->next;
}
}
head = vir->next;
return head;
}
};
// @lc code=end