单链表删除第i个元素int del(LinkList head,int i)
时间: 2024-10-13 20:18:28 浏览: 34
单链表删除第i个元素是一个常见的链表操作,特别是对于动态大小的列表。在头插法构建的链表中,这个过程需要一些特殊的处理,因为我们需要遍历链表找到位置i的节点,然后调整前一个节点的next指针跳过目标节点。
以下是基本步骤:
1. 首先检查链表是否为空,以及i是否越界。如果链表为空或者i大于链表长度减一,直接返回原链表(不做任何修改)。
2. 创建两个指针,`current`从头开始,`prev`初始化为NULL。
3. 当`current`指向的位置等于i时,找到了要删除的节点,将`prev`的next指针更新为`current->next`,即跳过被删除节点。
4. 如果`current`还没到达位置i,继续移动`current`到下一个位置,并将`prev`设置为`current`。
5. 完成遍历后,返回原始链表的头结点,表示链表结构已经被改变了。
```c++
LinkList del(LinkList head, int i) {
if (!head || i > getLength(head) - 1) return head;
LinkList prev = NULL;
LinkList current = head;
for (int j = 0; j < i && current != NULL; ++j) {
prev = current;
current = current->next;
}
if (prev) prev->next = current->next;
else head = current->next; // 删除的是头节点
return head;
}
```
阅读全文