当前位置:首页 > Java

java如何建立链表

2026-03-23 16:25:13Java

建立链表的基本概念

链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的引用。与数组不同,链表在内存中不必连续存储,插入和删除操作更高效。

单链表的实现

单链表的节点类通常包含数据域和指向下一个节点的指针。以下是一个简单的单链表实现:

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

public class LinkedList {
    ListNode head;

    // 在链表末尾添加节点
    public void append(int val) {
        ListNode newNode = new ListNode(val);
        if (head == null) {
            head = newNode;
            return;
        }
        ListNode current = head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = newNode;
    }

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

双向链表的实现

双向链表的节点包含指向前一个和后一个节点的指针,支持双向遍历:

class DoublyListNode {
    int val;
    DoublyListNode prev;
    DoublyListNode next;
    DoublyListNode(int val) {
        this.val = val;
        this.prev = null;
        this.next = null;
    }
}

public class DoublyLinkedList {
    DoublyListNode head;

    // 在末尾添加节点
    public void append(int val) {
        DoublyListNode newNode = new DoublyListNode(val);
        if (head == null) {
            head = newNode;
            return;
        }
        DoublyListNode current = head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = newNode;
        newNode.prev = current;
    }
}

链表的常用操作

链表的常见操作包括插入、删除、查找和反转:

java如何建立链表

// 在指定位置插入节点
public void insert(int index, int val) {
    ListNode newNode = new ListNode(val);
    if (index == 0) {
        newNode.next = head;
        head = newNode;
        return;
    }
    ListNode current = head;
    for (int i = 0; i < index - 1 && current != null; i++) {
        current = current.next;
    }
    if (current == null) return;
    newNode.next = current.next;
    current.next = newNode;
}

// 删除指定值的节点
public void delete(int val) {
    if (head == null) return;
    if (head.val == val) {
        head = head.next;
        return;
    }
    ListNode current = head;
    while (current.next != null && current.next.val != val) {
        current = current.next;
    }
    if (current.next != null) {
        current.next = current.next.next;
    }
}

// 反转链表
public void reverse() {
    ListNode prev = null;
    ListNode current = head;
    while (current != null) {
        ListNode next = current.next;
        current.next = prev;
        prev = current;
        current = next;
    }
    head = prev;
}

链表的时间复杂度

  • 插入/删除头节点:O(1)
  • 插入/删除中间或尾部节点:O(n)
  • 查找元素:O(n)
  • 访问元素:O(n)

注意事项

  • 处理链表时需注意边界条件,如空链表、单节点链表等。
  • 双向链表需同时维护prevnext指针,避免断链。
  • 循环链表的尾节点需指向头节点,形成闭环。

标签: 链表java
分享给朋友:

相关文章

java如何下载

java如何下载

下载Java的步骤 访问Oracle官方网站或OpenJDK项目页面下载Java开发工具包(JDK)。Oracle JDK适用于商业用途,OpenJDK为开源版本。 打开浏览器,进入Oracle J…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

java版本如何查看

java版本如何查看

查看Java版本的命令行方法 在命令行或终端中运行以下命令可以查看当前安装的Java版本: java -version 输出示例: java version "1.8.0_301" Java(TM…

java如何返回数组

java如何返回数组

返回数组的方法 在Java中,可以通过多种方式返回数组。以下是几种常见的方法: 直接返回数组 定义一个方法,返回类型为数组类型,直接在方法内部创建并返回数组。 public int[] getI…

php 实现 java md5加密

php 实现 java md5加密

PHP 实现 Java MD5 加密 Java 和 PHP 的 MD5 加密结果可能存在差异,主要由于字符编码和输出格式的不同。以下是确保 PHP 与 Java MD5 加密结果一致的方法。 确保字…