Java定义链表

链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。和数组不同,链表中的节点可以在内存中的任意位置,它们通过指针连接起来。链表有许多种类型,比如单向链表、双向链表和循环链表等。

单向链表

单向链表是最简单的链表类型,它的每个节点只包含一个指向下一个节点的指针,最后一个节点的指针指向空。

定义节点类

在Java中,我们可以通过定义一个节点类来表示链表中的每个节点。节点类通常包含两个字段:一个用于保存节点的数据,另一个用于保存指向下一个节点的指针。

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

在上面的示例代码中,data字段用于保存节点的数据,next字段用于保存指向下一个节点的指针。构造函数用于初始化节点对象,将传入的数据保存到data字段,将next字段初始化为null

定义链表类

链表类包含一个指向链表头节点的指针。在链表类中可以定义一些方法来操作链表,比如插入节点、删除节点、遍历链表等。

class LinkedList {
    Node head;

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

    // 在链表尾部插入节点
    public void append(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 print() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }
}

在上面的示例代码中,LinkedList类包含一个指向链表头节点的指针head。构造函数用于初始化链表对象,将head指针初始化为nullappend方法用于在链表尾部插入节点,如果链表为空,则将新节点设置为头节点;否则,找到链表中最后一个节点,将其next指针指向新节点。print方法用于遍历链表,并打印每个节点的数据。

使用链表

我们可以通过创建链表对象来使用链表。下面是一个简单的示例,演示了如何创建链表对象,以及如何在链表中插入节点并打印链表。

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

        list.append(1);
        list.append(2);
        list.append(3);

        list.print();
    }
}

运行上面的示例代码,输出结果为:

1 2 3

双向链表

双向链表(Doubly Linked List)在单向链表的基础上,每个节点除了保存指向下一个节点的指针外,还保存指向前一个节点的指针。

定义节点类

在Java中,我们可以通过定义一个节点类来表示双向链表中的每个节点。节点类通常包含三个字段:一个用于保存节点的数据,一个用于保存指向下一个节点的指针,一个用于保存指向前一个节点的指针。

class Node {
    int data;
    Node prev;
    Node next;

    public Node(int data) {
        this.data = data;
        this.prev = null;
        this.next = null;
    }
}

在上面的示例代码中,data字段用于保存节点的数据,prev字段用于保存指向前一个节点的指针,next字段用于保存指向下一个节点的指针。构造函数用于初始化节点对象,将传入的数据保存到data字段,将prevnext字段初始化为null

定义链表类

链表类包