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

使用Java编写基于链表的插入和删除函数

发布时间:2023-07-01 16:58:20

链表是一种常用的数据结构,它由一个个节点组成,每个节点中都存储着数据以及指向下一个节点的指针。链表可以动态地添加和删除节点,因此非常适合在插入和删除操作频繁的情况下使用。

下面我将使用Java编写基于链表的插入和删除函数。

首先,我们需要定义链表节点的类,包含一个存储数据的变量以及指向下一个节点的指针。代码如下:

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

接下来,我们可以编写链表的插入函数。在插入函数中,我们需要指定插入位置以及要插入的数值。插入过程需要先找到要插入位置的前一个节点,然后将新节点插入到该位置。代码如下:

public class LinkedList {
    ListNode head;
    
    public void insertNode(int position, int value) {
        ListNode newNode = new ListNode(value);
        if (position == 1) {
            newNode.next = head;
            head = newNode;
        } else {
            ListNode prev = head;
            for (int i = 2; i < position; i++) {
                prev = prev.next;
            }
            newNode.next = prev.next;
            prev.next = newNode;
        }
    }
}

在插入函数中,如果插入位置为1,则将新节点设为头节点,并将原来的头节点作为新节点的下一个节点。如果插入位置大于1,则需要遍历链表找到插入位置的前一个节点。然后将新节点的下一个节点设为前一个节点的下一个节点,将前一个节点的下一个节点设为新节点。

接下来,我们编写链表的删除函数。在删除函数中,我们需要指定要删除的数值。删除过程需要先找到要删除节点的前一个节点,然后将前一个节点的下一个节点设为删除节点的下一个节点。代码如下:

public class LinkedList {
    ListNode head;
    
    public void deleteNode(int value) {
        if (head == null) {
            return;
        }
        if (head.val == value) {
            head = head.next;
            return;
        }
        ListNode prev = head;
        while (prev.next != null && prev.next.val != value) {
            prev = prev.next;
        }
        if (prev.next != null) {
            prev.next = prev.next.next;
        }
    }
}

在删除函数中,首先判断头节点是否等于要删除的数值,如果是则将头节点设为原头节点的下一个节点。如果头节点不等于要删除的数值,则需要遍历链表找到要删除的节点的前一个节点。然后将前一个节点的下一个节点设为要删除节点的下一个节点。

通过上述的插入和删除函数,我们可以方便地在链表中进行插入和删除操作。这两个函数的时间复杂度为O(n),其中n为链表长度。