赞
踩
203. 移除链表元素
给你一个链表的头节点 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 <= k <= 50
- /**
- * 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* delNode=head;
- head=head->next;
- delete delNode;
- }
- if(head==NULL) return NULL;
- ListNode* prev=head;
- while(prev->next!=NULL){
- if(prev->next->val==val){
- ListNode* delNode=prev->next;
- prev->next=prev->next->next;
- delete delNode;
- }
- else prev=prev->next;
- }
- return head;
- }
- };
- //方法三:虚拟头节点
- class Solution {
- public:
- ListNode* removeElements(ListNode* head, int val) {
- ListNode* dummyHead=new ListNode(-1);
- dummyHead->next=head;
- ListNode* prev=dummyHead;
- while(prev->next!=NULL){
- if(prev->next->val==val){
- prev->next=prev->next->next;
- }
- else prev=prev->next;
- }
- return dummyHead->next;
- }
- };
- //方法三:递归
- class Solution {
- public:
- ListNode* removeElements(ListNode* head, int val) {
- if(head==NULL) return NULL;
- head->next=removeElements(head->next,val);
- return head->val==val? head->next:head;
- }
- };
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。