在给定节点之前插入节点
在这一步中,你将学习如何在双向链表的给定节点之前插入一个新节点。
- 在
list.c
文件中找到 insert_before()
函数。
- 该函数接受一个
struct List*
、一个 struct Node*
(要在其之前插入新节点的节点)以及新节点的 data
。
- 该函数应创建一个新的
struct Node
并使用提供的 data
初始化其 data
字段。
- 然后,该函数应更新新节点以及下一个节点的
next
和 prev
指针,以正确插入新节点。
- 最后,如果新节点是在链表开头插入的,该函数应更新
head
指针。
以下是更新后的 insert_before()
函数:
void insert_before(struct List* list, struct Node* next, void* data) {
struct Node* newnode = (struct Node *) malloc(sizeof(struct Node));
newnode->data = data;
if (next) { // 更新
newnode->prev = next->prev;
newnode->next = next;
next->prev = newnode;
if (newnode->prev) newnode->prev->next = newnode;
else list->head = newnode; // 更新
} else {
newnode->prev = list->tail;
newnode->next = NULL;
if (list->tail) list->tail->next = newnode;
else list->head = newnode; // 更新
list->tail = newnode;
}
}
- 找到
insert_before (list, NULL, data);
并将其更改为以下代码:
insert_before (list, list->head, data);