c语言单链表删除第i个元素int del(LinkList head,int i)
时间: 2024-10-14 21:03:43 浏览: 35
C语言单链表版学生信息管理系统
在C语言中,单链表删除第i个元素的函数`del(LinkList head, int i)`通常会涉及以下几个步骤:
1. **检查输入**:首先确认链表是否为空,以及索引i的有效性。如果链表为空或者i超出范围(即0 <= i < 链表长度),则直接返回。
2. **遍历链表**:创建两个指针p和q,初始化p为头节点,然后让q先走i步,到达第i个元素前的位置。此时,p指向需要删除元素的前一个节点。
3. **删除节点**:如果q没有移动到链表末尾,说明找到了第i个元素。删除操作是将p的下一个节点赋值给p,使得p指向的节点跳过被删除的节点。
4. **释放内存**:如果是第一个元素(i=0),可能需要特殊处理,因为p和head可能相同。这时,只需更新head为p->next即可;对于其他位置的元素,不需要额外的操作,因为p已经指向了新链表的第一个节点。
5. **返回结果**:函数结束时,链表可能已更改,所以返回指向修改后的链表的头节点`p`。
```c
typedef struct Node {
int data;
struct Node* next;
} LinkList;
LinkList* del(LinkList* head, int i) {
if (!head || i < 0) return head; // 检查边界
LinkList* p = head;
if (i == 0) {
head = head->next; // 删除头节点
} else {
for (int j = 0; j < i - 1 && p != NULL; j++) {
p = p->next;
}
if (p == NULL) return head; // i超出范围
p->next = p->next->next;
}
return head;
}
```
阅读全文