删除链表中出现的所有关键字为Key的节点

在讲如何删除所有关键字为key的节点之前,我们先讲一下如何删除第一次出现关键字为key的节点

删除第一次出现关键字为key的节点

public ListNode searchPrev(int key) {
        ListNode cur = this.head;
        while(cur.next != null) {
            if(cur.next.data == key) {
                return cur;
            }
            cur = cur.next;
        }
        return cur;
    }
public void remove(int key) {
        if(this.head.data == key) {
            this.head = this.head.next;
            return;
        }else {
        //找到要删除节点的前驱
            ListNode prev = searchPrev(key);
            if(prev == null) {
                System.out.println("该数字不存在!");
                return;
            }else {
                ListNode del = prev.next;
                prev.next = del.next;
            }

        }
    }

分析:
1、判断头节点是否为要删除的节点
2、如果头节点不是,则找到要删除节点的前一个节点

在这里插入图片描述

删除所有关键字为key的节点

 public void removeAllKey(int key) {
        ListNode prev = this.head;
        ListNode cur = this.head.next;
        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;
        }
    }

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 非常好的编程问题!这里给出一个Python的实现方式: def deleteLinkedListNode(head, key): # 如果要删除结点是头结点 while head and head.val == key: head = head.next # 如果头结点不是要删除结点,从头开始遍历 curr = head while curr and curr.next: if curr.next.val == key: curr.next = curr.next.next else: curr = curr.next return head 这个函数接受链表的头结点和一个关键字key作为输入,然后删除链表所有值为key结点,最后返回头结点。 ### 回答2: 要查找并删除单链表所有与key相等的元素节点,可以采取如下步骤: 1. 判断链表是否为空,若为空则直接退出。 2. 设定一个指针p指向链表节点。 3. 判断p的值是否等于key,若相等则将p指向下一个节点,否则继续执行下一步。 4. 设定一个指针prev指向p,用于记录上一个节点。 5. 通过循环,找到链表所有值等于key节点,并将prev的next指针指向p的next节点,即跳过了p节点。 6. 将p指向下一个节点。 7. 重复步骤3-6,直到p指向空节点为止。 8. 返回删除节点后的链表。 这个方法可以遍历整个链表,并删除所有与key相等的节点。通过维护prev指针,可以在删除节点时保持链表的完整性。 例如,假设链表为1 → 2 → 3 → 2 → 4,key为2。按照上述步骤操作,删除节点后的链表为1 → 3 → 4。 ### 回答3: 要查找并删除单链表所有与key相等的元素结点,首先需要遍历整个链表。 设定两个指针,一个指向当前结点,一个指向当前结点的前一个结点。 遍历链表时,判断当前结点的值是否等于key,如果相等,则删除当前结点。 具体步骤如下: 1. 初始化两个指针,一个指向链表结点,一个指向头结点的前一个结点(初始化为NULL)。 2. 开始遍历链表,循环条件是当前结点不为空。 3. 判断当前结点的值是否等于key,如果相等,则删除当前结点。 4. 如果当前结点的值不等于key,将前一个结点指针指向当前结点。 5. 将当前结点指针移动到下一个结点。 6. 继续循环,直到遍历完整个链表。 7. 返回链表结点。 代码示例: ''' def delete_nodes_with_key(node, key): dummy = ListNode(0) # 创建一个虚拟头结点 dummy.next = node # 将虚拟头结点连接到链表结点 prev = dummy # 初始化前一个结点指针 while node: if node.val == key: prev.next = node.next # 删除当前结点 else: prev = prev.next node = node.next # 将当前结点指针移动到下一个结点 return dummy.next # 返回链表结点 ''' 以上是使用Python代码实现的查找并删除单链表所有与key相等的元素结点的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值