仅遍历单链表一遍就删除链表中等于 key 的所有节点!

删除链表中等于给定值 key 的所有节点。

且只遍历单链表一遍!!!

让我们先看一下思维逻辑图:
在这里插入图片描述

先定义一个cur:当前所要删除的节点
在定义一个prev:前驱

i)当cur不等于null时,判断是否是key值,如果等于,则让prev直接指向cur的下一个值,跳过cur即删除了与key相等的cur。
ii)如果不等,则让cur和prev继续往下走,重复 i) 步骤
iii)如果头节点就是所要删除的key值的的话,直接跳过,让下一个节点变成新的头节点即可。

程序代码如下所示:

public void removeAllKey(int key) {
    ListNode cur = this.head.next;
    ListNode prev = this.head;
    while (cur != null) {
        if (prev.next.data == key) {
            prev.next = cur.next;
            cur = cur.next;
        } else {
            prev = cur;
            cur = cur.next;
        }

    }
    if (this.head.data == key) {
        this.head = this.head.next;
    }
}
发布了43 篇原创文章 · 获赞 41 · 访问量 1795

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/103012209