📅  最后修改于: 2023-12-03 14:51:24.739000             🧑  作者: Mango
双向链表是一种自我指向数据结构,每个节点都有指向前一个和后一个节点的指针。在双向链表中,可以非常方便地在任意两个节点之间进行插入和删除操作,而不必像单向链表那样从头开始逐个遍历。
当需要在双向链表中交换两个节点时,需要考虑以下几个方面:
下面给出一个简单的示例代码,以交换双向链表中的第 K 个节点为例:
// 定义双向链表节点结构体
struct ListNode {
int val;
ListNode* prev;
ListNode* next;
ListNode(int x) : val(x), prev(NULL), next(NULL) {}
};
ListNode* swapNode(ListNode* head, int k) {
if (head == NULL || head->next == NULL || k < 1) return head;
ListNode* p = head;
while (p != NULL && --k) p = p->next;
if (p == NULL) return head;
ListNode* q = p->next;
if (q == NULL) return head;
p->next = q->next;
q->prev = p->prev;
if (p == head) {
head = q;
} else {
p->prev->next = q;
}
if (q->next != NULL) {
q->next->prev = p;
}
p->prev = q;
q->next = p;
return head;
}
这个示例代码仅供参考,实际情况下需要根据具体的问题进行更改。