【leetcode203】移除链表元素
- 实例
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [], val = 1
输出:[]
输入:head = [7,7,7,7], val = 7
输出:[]
//结点结构
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!=nullptr && head->val==val) {
head = head->next;
}
//目标元素不是头节点
ListNode* cur = head;
while (cur!=nullptr && cur->next != nullptr) {
if (cur->next->val == val) {
cur->next = cur->next->next;
}
else{
cur = cur->next;
}
}
return head;
}
};
//方法二,利用虚拟头结点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//创建一个虚拟头结点,位于head之前
ListNode *dummyNode = new ListNode();
//创建一个遍历结点
ListNode*p = new ListNode();
dummyNode->next = head;
p = dummyNode;
//遍历是否头结点同等对待
while(p->next!=nullptr){
if(p->next->val==val){
p->next = p->next->next;
}
else{
p=p->next;
}
}
//返回虚拟头结点的next
return dummyNode->next;;
}
};
- 实例