删除单链表的第n个结点c语言代码内容
时间: 2024-10-12 18:13:56 浏览: 3
在 C 语言中,删除单链表的第 n 个节点需要考虑特殊情况,如头节点、链表长度小于 n 或者 n 超出链表范围等。这里是一个通用的示例代码,假设我们有一个结构体 `ListNode` 定义了链表节点:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 删除链表第 n 个节点的辅助函数,返回删除后的头结点
ListNode* deleteNode(ListNode* head, int n) {
if (!head || !head->next) { // 链表为空或只有一个元素
return head;
}
ListNode *prev = NULL; // 上一个节点指针初始化为NULL
ListNode *current = head;
int count = 0; // 记录当前遍历到的位置
while (current != NULL && count < n) {
prev = current;
current = current->next;
count++;
}
// 如果找到目标位置,删除当前节点
if (count == n) {
if (prev == NULL) { // 目标节点是头节点
head = current->next;
} else {
prev->next = current->next;
}
free(current); // 释放已删除节点的内存
}
return head;
}
```
这个函数首先检查链表是否为空或只有一个节点,然后通过遍历找到第 n 个节点并更新前驱节点的 `next` 指针跳过它。如果找到了第 n 个节点,就从链表中移除,并释放该节点的内存。
注意:实际使用时,记得处理边界情况和错误,比如传递的 n 小于 1 的时候。