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

public class LinkedList {
    ListNode head;

    public LinkedList() {
        this.head = null;
    }

    // 添加结点
    public void addNode(int val) {
        ListNode newNode = new ListNode(val);
        if (head == null) {
            head = newNode;
        } else {
            ListNode curr = head;
            while (curr.next != null) {
                curr = curr.next;
            }
            curr.next = newNode;
        }
    }

    // 删除值为x的结点
    public void deleteNode(int x) {
        if (head == null) {
            return;
        }
        // 处理头结点为x的情况
        while (head != null && head.val == x) {
            head = head.next;
        }
        
        ListNode curr = head;
        ListNode prev = null;
        while (curr != null) {
            if (curr.val == x) {
                prev.next = curr.next;
            } else {
                prev = curr;
            }
            curr = curr.next;
        }
    }

    // 打印链表
    public void printList() {
        ListNode curr = head;
        while (curr != null) {
            System.out.print(curr.val + ' ');
            curr = curr.next;
        }
        System.out.println();
    }
}

public class Main {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.addNode(1);
        list.addNode(2);
        list.addNode(2);
        list.addNode(3);
        list.addNode(1);
        
        System.out.print('Original List: ');
        list.printList();
        
        int x = 2;
        list.deleteNode(x);
        
        System.out.print('List after deleting ' + x + ': ');
        list.printList();
    }
}

输出:

Original List: 1 2 2 3 1 
List after deleting 2: 1 3 1 
Java单链表删除指定值节点算法实现及代码示例

原文地址: https://www.cveoy.top/t/topic/pgUJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录