双链表(Double Link List)是一种数据结构,每个节点包含两个指针,分别指向前一个节点和后一个节点。相比于单链表,双链表可以双向遍历,删除和更新操作也更加灵活方便。
下面是在Java中实现双链表的删除和更新操作的示例:
删除操作
双链表的删除操作需要考虑以下情况:
待删除节点是头节点
待删除节点是尾节点
待删除节点是中间节点
示例代码
public class DoublyLinkedList {
// 定义链表节点
class ListNode {
int val;
ListNode prev;
ListNode next;
ListNode(int val) {
this.val = val;
this.prev = null;
this.next = null;
}
}
private ListNode head;
private ListNode tail;
// 删除节点
public void deleteNode(ListNode node) {
if (node == head) { // 待删除节点是头节点
head = head.next;
if (head != null) {
head.prev = null;
} else {
tail = null;
}
} else if (node == tail) { // 待删除节点是尾节点
tail = tail.prev;
tail.next = null;
} else { // 待删除节点是中间节点
node.prev.next = node.next;
node.next.prev = node.prev;
}
}
}
更新操作
双链表的更新操作可以分为两种情况:
更新节点的值
将节点移动到另一个位置
示例代码如下:
public class DoublyLinkedList {
// 定义链表节点
class ListNode {
int val;
ListNode prev;
ListNode next;
ListNode(int val) {
this.val = val;
this.prev = null;
this.next = null;
}
}
private ListNode head;
private ListNode tail;
// 删除节点
public void deleteNode(ListNode node) {
if (node == head) { // 待删除节点是头节点
head = head.next;
if (head != null) {
head.prev = null;
} else {
tail = null;
}
} else if (node == tail) { // 待删除节点是尾节点
tail = tail.prev;
tail.next = null;
} else { // 待删除节点是中间节点
node.prev.next = node.next;
node.next.prev = node.prev;
}
}
}
以上就是在Java中实现双链表的删除和更新操作的示例代码。