数据结构——单向链表——java版

发布于:2024-04-05 ⋅ 阅读:(69) ⋅ 点赞:(0)

本来这个专栏应该是数据结构——C++版的,但是C++还没学,只学了一点基础,还是Java比较熟悉一点,所以接下来还都是用Java来实现。好,接下来让我们开始正题。

什么是单向链表?

单向链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。它的特点是数据元素之间是单向连接的,每个节点只有一个指针指向下一个节点,最后一个节点指向空(null)。

在单向链表中,可以从头节点开始沿着指针依次访问每个节点,但不能从任意节点直接访问前一个节点,因为只有指向后一个节点的指针。

插入和删除操作是单向链表的主要操作。在单向链表中,插入和删除节点相对容易,只需要修改指针指向即可,不需要像数组那样移动大量元素。但是,查找某个节点的前一个节点则需要从头节点开始遍历整个链表,时间复杂度为 O(n),其中 n 是链表的长度。

注意:单向链表的优点是插入和删除操作效率高,适合频繁插入和删除操作的场景。缺点是不能快速地查找前一个节点,需要遍历整个链表。

单向链表的基本操作:

单向链表的基本操作包括插入、删除和遍历等操作。

1. 插入操作:在链表的任意位置插入一个新节点。
2. 删除操作:删除链表中指定位置的节点。
3. 遍历操作:遍历链表,访问链表中的每个节点。
 

单向链表的实现:
class ListNode {
    int value;
    ListNode next;

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

class LinkedList {
    ListNode head;

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

    // 插入操作
    public void insert(int value) {
        ListNode newNode = new ListNode(value);
        if (head == null) {
            head = newNode;
            return;
        }
        ListNode current = head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = newNode;
    }

    // 删除操作
    public void delete(int value) {
        if (head == null) return;

        if (head.value == value) {
            head = head.next;
            return;
        }

        ListNode current = head;
        while (current.next != null && current.next.value != value) {
            current = current.next;
        }
        if (current.next != null) {
            current.next = current.next.next;
        }
    }

    // 遍历操作
    public void traverse() {
        ListNode current = head;
        while (current != null) {
            System.out.print(current.value + " ");
            current = current.next;
        }
        System.out.println();
    }
}

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

        // 插入操作
        list.insert(1);
        list.insert(2);
        list.insert(3);

        // 遍历操作
        list.traverse(); // 输出:1 2 3

        // 删除操作
        list.delete(2);

        // 遍历操作
        list.traverse(); // 输出:1 3
    }
}
Java中快速实现单向链表:

在Java中,并没有内置的单向链表API。但是,你可以使用Java中的集合框架中的LinkedList类来实现单向链表的功能。LinkedList类实际上是一个双向链表,但是你可以通过只使用next指针来模拟单向链表的行为。

例如:我们可以通过只使用addLast、addFirst和remove方法来模拟单向链表的行为。

下面是一个使用Java的LinkedList类来实现单向链表功能的示例:

import java.util.LinkedList;

public class Main {
    public static void main(String[] args) {
        // 创建一个LinkedList对象来表示单向链表
        LinkedList<Integer> linkedList = new LinkedList<>();

        // 在链表末尾添加元素
        linkedList.addLast(1);
        linkedList.addLast(2);
        linkedList.addLast(3);

        // 在链表头部添加元素
        linkedList.addFirst(0);

        // 打印链表
        for (Integer value : linkedList) {
            System.out.print(value + " ");
        }
        System.out.println();

        // 删除第一个值为2的元素
        linkedList.remove((Integer) 2);

        // 打印链表
        for (Integer value : linkedList) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}
总结:

单向链表是一种常见的数据结构,具有插入和删除操作高效的特点,适合于频繁插入和删除的场景。通过自定义节点类和链表类,我们可以在Java中实现单向链表,并进行相关操作。单向链表的灵活性和高效性使其在实际应用中得到广泛的应用。