给你一个链表的头节点 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-linked-list-elements
#include<iostream>
using namespace std;
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) {}
};
void tailInsert(ListNode* headNode, int n)
{
ListNode* tailPointer = headNode;
for (int i = 0; i < n; i++)
{
ListNode* L = new ListNode;
cin >> L->val;
tailPointer->next = L;
tailPointer = L;
}
}
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
while (head != nullptr && head->val == val)
{
ListNode* temp = head;
head = head->next;
delete temp;
}
ListNode* Pointer1 = head;
if (Pointer1 != nullptr)
{
while (Pointer1->next != nullptr)
{
if (Pointer1->next->val == val)
{
Pointer1->next = Pointer1->next->next;
}
else
{
Pointer1 = Pointer1->next;
}
}
}
return head;
}
};
int main()
{
ListNode* _headNode = new ListNode;
cin >> _headNode->val;
int n;
cin >> n;
tailInsert(_headNode, n);
Solution s1;
int m;
cin >> m;
_headNode = nullptr;
ListNode* Pointer = s1.removeElements(_headNode, m);
if (Pointer == nullptr)
cout << "error" << endl;
while (Pointer != nullptr)
{
cout << Pointer->val;
Pointer = Pointer->next;
}
return 0;
}