单链表是一种基本的数据结构,它由一系列节点构成,每个节点包含数据部分和指向下一个节点的指针。在Java中,我们可以通过自定义类来模拟单链表的实现。下面我们将详细讲解单链表的基本操作,包括插入、删除、查找和遍历等,同时提供相关的代码示例。

单链表的节点类

首先,需要定义单链表的节点类。每个节点都包含一个数据域和一个指向下一个节点的引用。

class Node {
    int data; // 数据部分
    Node next; // 指向下一个节点的指针

    Node(int data) {
        this.data = data;
        this.next = null; // 初始化时指向null
    }
}

单链表类

接下来,我们需要定义一个单链表类,包含基本的操作方法,如插入、删除、查找和遍历。

class SinglyLinkedList {
    private Node head; // 表示链表的头节点

    public SinglyLinkedList() {
        this.head = null; // 初始化时链表为空
    }

    // 插入节点
    public void insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode; // 如果链表为空,直接将新节点作为头节点
        } else {
            Node current = head;
            while (current.next != null) {
                current = current.next; // 遍历到链表的最后一个节点
            }
            current.next = newNode; // 将新节点插入到链表末尾
        }
    }

    // 删除节点
    public void delete(int key) {
        Node current = head;
        Node previous = null;

        // 如果头节点是目标节点
        if (current != null && current.data == key) {
            head = current.next; // 更改头节点
            return;
        }

        // 查找需要删除的节点
        while (current != null && current.data != key) {
            previous = current;
            current = current.next;
        }

        // 如果未找到节点
        if (current == null) {
            System.out.println("节点 " + key + " 不存在.");
            return;
        }

        // 解除当前节点的连接
        previous.next = current.next;
    }

    // 查找节点
    public boolean search(int key) {
        Node current = head;
        while (current != null) {
            if (current.data == key) {
                return true; // 找到节点
            }
            current = current.next;
        }
        return false; // 未找到节点
    }

    // 遍历链表
    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " -> ");
            current = current.next;
        }
        System.out.println("null");
    }
}

示例代码

下面是如何使用上述单链表类的示例代码:

public class LinkedListDemo {
    public static void main(String[] args) {
        SinglyLinkedList list = new SinglyLinkedList();

        // 插入节点
        list.insert(10);
        list.insert(20);
        list.insert(30);

        // 遍历链表
        System.out.println("链表内容:");
        list.display(); // 输出: 10 -> 20 -> 30 -> null

        // 查找节点
        System.out.println("查找 20: " + list.search(20)); // 输出: true
        System.out.println("查找 40: " + list.search(40)); // 输出: false

        // 删除节点
        list.delete(20);
        System.out.println("删除 20 后的链表:");
        list.display(); // 输出: 10 -> 30 -> null
    }
}

总结

通过以上实现,可以看到单链表的基本操作都是比较简单的。单链表在许多应用中非常有用,例如动态数组的替代方案、实现栈和队列等。掌握单链表的构建与操作,对学习更复杂的数据结构如双向链表、红黑树等都有着基础性的作用。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部