移除链表指定值的元素

package com.example.nanchen.algorithm;

import com.example.nanchen.entity.ListNode;

/**
 * @author bao-fa
 * @date 2022/1/13
 * 移除链表元素
 */
public class RemoveLinkListElements {

    public static void main(String[] args) {
        ListNode head = ListNode.create(false,1,2,1,4,5);
        ListNode listNode = remove(head, 1);
        while (listNode != null) {
            System.out.println(listNode.val);
            listNode = listNode.next;
        }
    }

    /**
     * 不创造虚头结点的删除方式
     */
    public static ListNode delete(ListNode head, int val) {
        while (head != null && head.val == val) {
            head = head.next;
        }
        if (head == null) {
            return head;
        }
        //当前结点
        ListNode cur = head;
        //当前结点的下一个结点
        ListNode curNext = cur.next;
        while (curNext != null) {
            if (curNext.val == val) {
                cur.next = curNext.next;
            }else {
                cur = curNext;
            }
            curNext = curNext.next;
        }
        return head;
    }

    /**
     * 创造虚头结点的删除方式
     */
    public static ListNode remove(ListNode head, int val) {
        ListNode virtualNode = new ListNode(-1, head);
        //当前结点
        ListNode cur = virtualNode;
        //当前结点的下一个结点
        ListNode curNext = cur.next;
        while (curNext != null) {
            if (curNext.val == val) {
                cur.next = curNext.next;
            }else {
                cur = curNext;
            }
            curNext = curNext.next;
        }
        return virtualNode.next;
    }
}

package com.example.nanchen.entity;

/**
 * @author bao-fa
 * @date 2022/1/13
 * 单链表定义
 */

public class ListNode {
    public int val;
    public ListNode next;
    public ListNode() {

    }
    public ListNode(int val) {
        this.val = val;
    }
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

    /**
     * 创造一个单链表
     * @param virtualHead 虚头结点 (创造虚头结点,可将头结点当做普通结点处理)
     * @param vals 链表结点值
     * @return
     */
    public static ListNode create(boolean virtualHead,int...vals){
        //头结点
        ListNode head;
        int i;
        if (virtualHead) {
            //头结点为-1,代表这个结点是虚头结点。
            head = new ListNode(-1);
            i = 0;
        }else {
            head = new ListNode(vals[0]);
            i = 1;
        }
        //尾结点
        ListNode trail = head;
        while (i < vals.length) {
            ListNode nextListNode = new ListNode(vals[i]);
            trail.next = nextListNode;
            trail = nextListNode;
            i++;
        }
        return head;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值