当前位置:首页 > Java

java如何实现链表

2026-03-03 23:40:26Java

实现链表的基本结构

在Java中,链表可以通过定义一个节点类(Node)和链表类(LinkedList)来实现。每个节点包含数据(data)和指向下一个节点的引用(next)。

class Node {
    int data;
    Node next;

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

链表的初始化

链表类通常包含一个头节点(head)作为链表的起始点。初始化时,头节点可以为空。

class LinkedList {
    Node head;

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

插入节点

链表的插入操作分为头部插入、尾部插入和指定位置插入。

头部插入:

public void insertAtHead(int data) {
    Node newNode = new Node(data);
    newNode.next = head;
    head = newNode;
}

尾部插入:

public void insertAtTail(int data) {
    Node newNode = new Node(data);
    if (head == null) {
        head = newNode;
        return;
    }
    Node current = head;
    while (current.next != null) {
        current = current.next;
    }
    current.next = newNode;
}

指定位置插入:

public void insertAtPosition(int data, int position) {
    if (position == 0) {
        insertAtHead(data);
        return;
    }
    Node newNode = new Node(data);
    Node current = head;
    for (int i = 0; i < position - 1 && current != null; i++) {
        current = current.next;
    }
    if (current == null) {
        return;
    }
    newNode.next = current.next;
    current.next = newNode;
}

删除节点

删除操作可以通过值或位置实现。

java如何实现链表

删除指定值的节点:

public void deleteByValue(int data) {
    if (head == null) {
        return;
    }
    if (head.data == data) {
        head = head.next;
        return;
    }
    Node current = head;
    while (current.next != null && current.next.data != data) {
        current = current.next;
    }
    if (current.next != null) {
        current.next = current.next.next;
    }
}

删除指定位置的节点:

public void deleteByPosition(int position) {
    if (head == null) {
        return;
    }
    if (position == 0) {
        head = head.next;
        return;
    }
    Node current = head;
    for (int i = 0; i < position - 1 && current != null; i++) {
        current = current.next;
    }
    if (current == null || current.next == null) {
        return;
    }
    current.next = current.next.next;
}

遍历链表

遍历链表可以通过循环从头节点开始,依次访问每个节点。

public void traverse() {
    Node current = head;
    while (current != null) {
        System.out.print(current.data + " ");
        current = current.next;
    }
    System.out.println();
}

查找节点

查找操作可以通过值或索引实现。

java如何实现链表

查找指定值的节点:

public boolean contains(int data) {
    Node current = head;
    while (current != null) {
        if (current.data == data) {
            return true;
        }
        current = current.next;
    }
    return false;
}

查找指定位置的节点:

public int getByPosition(int position) {
    Node current = head;
    for (int i = 0; i < position && current != null; i++) {
        current = current.next;
    }
    if (current == null) {
        throw new IndexOutOfBoundsException();
    }
    return current.data;
}

反转链表

反转链表可以通过迭代或递归实现。以下是迭代方法:

public void reverse() {
    Node prev = null;
    Node current = head;
    Node next = null;
    while (current != null) {
        next = current.next;
        current.next = prev;
        prev = current;
        current = next;
    }
    head = prev;
}

链表的长度

计算链表的长度可以通过遍历节点计数实现。

public int length() {
    int count = 0;
    Node current = head;
    while (current != null) {
        count++;
        current = current.next;
    }
    return count;
}

分享给朋友:

相关文章

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div> <…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现…

Java如何实现异步处理

Java如何实现异步处理

Java实现异步处理的常见方法 使用CompletableFuture CompletableFuture是Java 8引入的异步编程工具,支持链式调用和组合操作。 CompletableFutur…

vue如何实现渲染

vue如何实现渲染

Vue 渲染实现方法 Vue 的渲染主要通过模板编译、虚拟 DOM 和响应式系统实现。以下是具体实现方式: 模板编译 Vue 模板会被编译成渲染函数。模板可以写在 .vue 文件的 <temp…

vue框架如何实现

vue框架如何实现

Vue框架实现步骤 安装Vue.js 通过npm或CDN引入Vue.js,npm安装命令:npm install vue。CDN引入直接在HTML文件中添加Vue.js的script标签。 创建Vu…

vue如何实现跳转

vue如何实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转可以通过以下几种方式,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router 提供的组…