移除链表元素

题目:
删除链表中等于给定值 val 的所有节点

实例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题思路:

前后两个结点依次遍历每一个链表元素即可。这道题的易错点在于对头结点就等于val的处理上,因此两种办法处理头结点:
方法一
忽视头结点,直接从第二个结点开始判断,在最后的最后处理头结点

//1.cur走前面,prev走后面
//2.while(cur的val相等时,prev的next指向cur的next)
//3.我们默认从第二个节点开始判断的,在最后判断一下头节点
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        if(head == NULL){
            return NULL;
        }
        ListNode* cur = head->next;
        ListNode* prev = head;
        while(cur != NULL){
            while(cur != NULL && cur->val == val){
                prev->next = cur->next;
                cur = cur->next;
            }
            prev = prev->next;
            if(prev == NULL)
                break;
            cur = prev->next;
        }
        if(head->val == val){
            return head->next;
        }
        return head;
    }
};

方法二
创建一个新的头结点指向原来的头结点,处理完毕之后,最后把创建的这个头结点删除即可。

ListNode* newhead = new ListNode(-1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值