如何处理链表的插入和删除操作?
时间: 2024-09-20 09:07:24 浏览: 20
链表的插入和删除操作相比于数组来说更方便,因为它们不需要像数组那样移动大量的元素。以下是基本的插入和删除操作:
### 插入操作:
1. **在头部插入**: 创建一个新节点,将其`next`属性设置为原头节点,然后将原头节点指向新节点。
```java
void insertAtHead(int value) {
ListNode newNode = new ListNode(value);
newNode.next = head;
head = newNode;
}
```
2. **在特定位置插入**: 寻找插入点前的节点,然后更新其`next`指向新的插入节点。
```java
void insertAtPosition(int position, int value) {
if (position == 1) {
insertAtHead(value);
} else {
ListNode current = head;
for (int i = 1; i < position - 1 && current != null; i++) {
current = current.next;
}
if (current != null) {
ListNode newNode = new ListNode(value);
newNode.next = current.next;
current.next = newNode;
}
}
}
```
### 删除操作:
1. **删除头部元素**: 如果链表非空,直接将头节点的`next`指向第二个节点,头节点变成下一个节点。
```java
void deleteHead() {
if (head != null) {
ListNode temp = head;
head = head.next;
temp = null; // 释放临时变量
}
}
```
2. **删除指定位置元素**: 同样需要找到待删除节点的前一个节点,然后更新其`next`跳过待删除节点。
```java
void deleteAtPosition(int position) {
if (position > 0) {
ListNode current = head;
for (int i = 1; i < position && current != null; i++) {
current = current.next;
}
if (current != null && current.next != null) {
current.next = current.next.next;
}
}
}
```