移除链表元素(删除链表中的节点)

思路:

  一、直接在原链表上操作:

    1、如果第一个为目标元素,将头节点更新为下一个

    2、如果不是第一个替换下一个元素为下下一个

    注意:删除第一个元素要用while而不是if 

                原因:删完第一个,第二个也可能是目标val

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {

        //第一个节点是删除目标,删掉
        while(head != NULL && head->val == val ){
            ListNode *temp = head;
            head = head->next;
            delete temp;
        }
        //else;
        ListNode *current = head;
        while(current != NULL && current->next != NULL){
            if(current->next->val == val){
                ListNode *temp = current->next;
                current->next = current->next->next;
                delete temp;
            }else{
                current = current->next;
            }
        }
        return head;
    }
};

二、设置一个虚拟节点指向的下一个元素为head

注意:head在末尾要再执行一遍赋值操作,即将head的值变为虚拟头节点的下一个

           原因:return直接返回head,当head的val值等于目标val时,此时的head可能已经被删除

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummyhead = new ListNode(0);
        dummyhead->next = head;
        ListNode *current = dummyhead;
        while(current->next != NULL){
            if(current->next->val == val){
                ListNode *temp = current->next;
                current->next = current->next->next;
                delete temp;
            }else{
                current = current->next;
            }
        }
        head = dummyhead->next;
        delete dummyhead;
        return head;
    }
};

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值