美文网首页
链表入指定值清除

链表入指定值清除

作者: 熊白白 | 来源:发表于2017-07-16 19:44 被阅读17次

现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。

给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。

    ListNode* clear(ListNode* head, int val) {
        if(!head)
            return nullptr;
        while(head->val==val){ //注意了,不是if而是while因为新的头部也可能是待删的。
        //所以可见头结点链表的优越性
            ListNode* t=head->next;
            delete head;
            head=t;
        }
        if(!head)
            return nullptr;
        ListNode* p=head; //
        while(p->next){
            if(p->next->val==val){
                ListNode* t=p->next;
                p->next=t->next;
                delete t;
            }
            else            //加上else
                p=p->next; //注意不能所有情况都next,这样两个连在一起的就会出错。
        }
        return head;
    }

思考

看似很简单的问题,其实很容易出错:

  1. 首结点就是待删结点的问题:
    以为做一个简单的if就可以了,实际上不是,因为删掉首结点,露出来的新首结点可能还是待删结点。所以要做一个循环来得到第一个非删结点。此时可以看到,带头结点的链表处理起来会顺利多得多。
  2. 遍历指针的问题:
    如果删除了某个结点,遍历指针直接跳到该结点后?还是结点前?一不小心就会少删,对于相同值连在一起的情况

相关文章

  • 链表入指定值清除

    现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。 给定一个单链表的头...

  • 5_8链表指定值清除

    现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。 给定一个单链表的头...

  • 1.单链表常用操作

    1.删除单链表中的指定节点 2.删除单链表中指定值的节点 (1). 利用栈删除单链表指定值的节点 (2). 用普通...

  • 链表一个小小的练习

    删除链表中某一个指定值的结点。所有结点的值都不同。

  • 链表(下)

    1.链表划分 思路一:可以把链表当作一副牌一样,用指针p遍历,不断地把比指定值x小的几点不断地插到前面比指定值小的...

  • 链表的天然递归结构性质

    有关链表,参考之前的文章学习。要求:使用递归删除链表中指定的所有元素值。 一、图文分析 假设有这么一个链表,如下图...

  • Redis链表相关命令

    redis链表存储一般操作 flushdb会清除该库所有键值对 lpush key value 作用:把值插入链接...

  • 链表

    1 合并两个链表 2 链表判环 并返回入环节点的值 3 两个无环单链表是否相交 4 合并两个有序链表 5 链表排序

  • 链表

    单向链表 包含,创建,析构,指定位置插入,指定位置删除,反向链表,打印 双向链表 包含,创建,析构,指定位置后插入...

  • 算法相关笔记,持续更新中...

    单链表 1.删除单链表中的指定节点: 2.单链表中删除指定数值的节点方法一:利用栈 3.单链表中删除指定数值的节点...

网友评论

      本文标题:链表入指定值清除

      本文链接:https://www.haomeiwen.com/subject/dgkxkxtx.html