使用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为链表长度。
