欢迎访问宙启技术站
智能推送

在Java中实现链表数据结构的函数

发布时间:2023-07-01 02:44:05

在Java中实现链表数据结构的函数:

链表是一种常用的数据结构,在Java中实现链表的方法有很多种。下面介绍一种简单的实现方式。

1. 定义链表节点类

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

    // 构造函数
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

2. 实现链表类

class LinkedList {
    private Node head; // 头节点

    // 初始化链表
    public LinkedList() {
        head = null;
    }

    // 在链表末尾添加节点
    public void append(int data) {
        Node newNode = new Node(data);

        // 如果链表为空,新节点作为头节点
        if (head == null) {
            head = newNode;
            return;
        }

        // 遍历链表找到末尾节点
        Node lastNode = head;
        while (lastNode.next != null) {
            lastNode = lastNode.next;
        }

        // 将新节点添加到末尾
        lastNode.next = newNode;
    }

    // 在链表任意位置插入节点
    public void insert(int data, int position) {
        Node newNode = new Node(data);

        // 如果要在头节点插入
        if (position == 0) {
            newNode.next = head;
            head = newNode;
            return;
        }

        // 遍历链表找到插入位置的前一个节点
        Node prevNode = head;
        for (int i = 0; i < position - 1; i++) {
            prevNode = prevNode.next;
            if (prevNode == null) {
                throw new IndexOutOfBoundsException("Position out of range");
            }
        }

        // 插入新节点
        newNode.next = prevNode.next;
        prevNode.next = newNode;
    }

    // 在链表任意位置删除节点
    public void delete(int position) {
        // 如果链表为空,直接返回
        if (head == null) {
            return;
        }

        // 如果要删除头节点
        if (position == 0) {
            head = head.next;
            return;
        }

        // 遍历链表找到删除位置的前一个节点
        Node prevNode = head;
        for (int i = 0; i < position - 1; i++) {
            prevNode = prevNode.next;
            if (prevNode == null) {
                throw new IndexOutOfBoundsException("Position out of range");
            }
        }

        // 如果删除位置大于链表长度,直接返回
        if (prevNode.next == null) {
            return;
        }

        // 删除节点
        Node deleteNode = prevNode.next;
        prevNode.next = deleteNode.next;
    }

    // 获取链表长度
    public int length() {
        int length = 0;
        Node currentNode = head;

        while (currentNode != null) {
            length++;
            currentNode = currentNode.next;
        }

        return length;
    }

    // 打印链表
    public void printList() {
        Node currentNode = head;

        while (currentNode != null) {
            System.out.print(currentNode.data + " ");
            currentNode = currentNode.next;
        }

        System.out.println();
    }
}

上述代码实现了常见的链表操作,包括在链表末尾添加节点、在链表任意位置插入节点、在链表任意位置删除节点、获取链表长度和打印链表等功能。可以根据需要进行调用和测试。在实践中,可以根据实际需求对链表类进行扩展和优化。