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

Java函数实现链表的增删改查

发布时间:2023-05-29 05:27:53

链表是一种数据结构,由一系列节点(Node)组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表是一种动态数据结构,可以动态添加节点,不需要预先分配空间大小。链表的节点可以按照顺序访问,也可以根据索引访问。

Java中链表的实现方式比较多,常见的有单向链表和双向链表两种。在本文中,我们主要介绍单向链表的实现方式,并在此基础上实现链表的增删改查操作。

单向链表的节点类实现

首先,我们需要定义一个节点的类,包含两个属性:data(数据元素)和next(指向下一个节点的指针)。

public class Node {  

    public int data; // 数据部分  

    public Node next; // 指向下一个节点的指针  

    public Node(int data) {  

        this.data = data;  

        this.next = null;  

    }  

}

单向链表的实现方式

单向链表是一种基本的动态数据结构,由一系列节点(Node)组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单向链表的头节点是链表的入口,尾节点指向null。

public class LinkedList {  

    Node head; // 链表头  

    public LinkedList() {  

        head = null;  

    }  

}

链表的增删改查操作实现

1. 链表的添加操作

链表的添加操作分为在链表头插入节点和在链表尾插入节点。

// 在链表头插入节点  

public void addFirst(int data) {  

    Node newNode = new Node(data); // 创建新节点  

    if (head == null) {  

        head = newNode; // 空链表  

    } else {  

        newNode.next = head; // 新节点指向头节点  

        head = newNode; // 头指针指向新的节点  

    }  

}  

// 在链表尾插入节点  

public void addLast(int data) {  

    Node newNode = new Node(data); // 创建新节点  

    if (head == null) {  

        head = newNode; // 空链表  

    } else {  

        Node lastNode = head;  

        while (lastNode.next != null) {  

            lastNode = lastNode.next; // 移动到最后一个节点  

        }  

        lastNode.next = newNode; // 新节点挂在最后一个节点的后面  

    }  

}  

2. 链表的删除操作

链表的删除操作分为删除链表头节点和删除链表指定位置的节点。

// 删除链表头节点  

public void removeHead() {  

    if (head != null) {  

        head = head.next; // 头指针指向下一个节点  

    }  

}  

// 删除链表指定位置的节点  

public void remove(int index) {  

    if (index < 0) {  

        throw new IndexOutOfBoundsException(); // 参数检查  

    }  

    if (index == 0) {  

        removeHead(); // 删除头节点  

    } else {  

        Node preNode = head;  

        Node curNode = head.next;  

        for (int i = 1; i < index && curNode != null; i++) {  

            preNode = curNode; // 移动到指定位置  

            curNode = curNode.next;  

        }  

        if (curNode != null) {  

            preNode.next = curNode.next; // 指定节点的前一个节点指向指定节点的后一个节点  

        }  

    }  

}  

3. 链表的修改操作

链表的修改操作只需要找到指定位置的节点即可。

// 修改链表指定位置的节点  

public void set(int index, int data) {  

    if (index < 0 || index >= size()) {  

        throw new IndexOutOfBoundsException(); // 参数检查  

    }  

    Node curNode = head;  

    for (int i = 0; i < index; i++) {  

        curNode = curNode.next; // 移动到指定位置  

    }  

    curNode.data = data; // 修改节点数据  

}  

4. 链表的查询操作

链表的查询操作分为查询头节点、查询尾节点和查询指定位置的节点。

// 查询链表头节点  

public Node getFirst() {  

    return head;  

}  

// 查询链表尾节点  

public Node getLast() {  

    Node lastNode = head;  

    while (lastNode != null && lastNode.next != null) {  

        lastNode = lastNode.next; // 移动到最后一个节点  

    }  

    return lastNode;  

}  

// 查询链表指定位置的节点  

public Node get(int index) {  

    if (index < 0 || index >= size()) {  

        throw new IndexOutOfBoundsException(); // 参数检查  

    }  

    Node curNode = head;  

    for (int i = 0; i < index; i++) {  

        curNode = curNode.next; // 移动到指定位置  

    }  

    return curNode;  

}  

总结

本文主要介绍了Java中单向链表的实现方式,并在此基础上实现了链表的增删改查操作。链表是一种基本的动态数据结构,具有动态添加节点,按顺序访问节点等特点,是Java编程中常用的数据结构之一。在实际开发中,我们可以利用链表构建各种应用程序,如字符串匹配、高精度计算等。