链表的删除和插入一样是链表的重要的操作之一,也是链表相对于顺序表的方便之处。
void deletelinkedlist(LINKED_LIST* list, int index) {
if (index < 0 || index >= list->size) {
printf("INVALID\n");
return;
}
if (index == 0) {
LINK_NODE next = list->head->next;
free(list->head);
list->head = next;
} else {
LINK_NODE current = list->head;
for (int i = 0; i < index-1; i++) { // 循环应该到达要删除的节点的前一个节点
current = current->next; // 移动到下一个节点
}
LINK_NODE temp = current->next; // temp 指向要删除的节点
current->next = temp->next; // 更新 current 的 next 指针以跳过 temp 指向的节点
free(temp); // 释放要删除的节点内存空间
}
list->size--; // 更新链表大小信息
}
如果没看过之前的插入操作的uu可以去看看之前有图的插入操作详解,这里有了插入的基础,删除理解起来就更加容易一些。
首先还是对下标的合法性进行判断,然后先定义一个操作指针current来遍历链表,定义next指针为current->next->next。