请设计一个C语言算法,给一个链表,删除链表的倒数第i个结点,并且返回链表的头结点
时间: 2024-09-26 19:05:43 浏览: 48
在C语言中,我们可以使用迭代或递归的方式实现删除链表倒数第i个节点的操作。这里提供一种迭代的方法:
首先,我们需要定义链表节点结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,假设有一个指向链表头的指针`head`,以及一个函数`deleteKthFromEnd(Node** head, int i)`来执行删除操作:
```c
Node* deleteKthFromEnd(Node** head, int k) {
if (*head == NULL || k <= 0) return *head;
// 创建两个指针,快慢指针,快指针每次走两步,慢指针每次走一步
Node* slow = *head;
Node* fast = *head;
for (int j = 0; j < k - 1; j++) {
if (fast != NULL) {
fast = fast->next;
}
}
// 如果快指针已经到达链表末尾,说明需要删除的是头节点,直接返回下一个节点
if (fast == NULL) {
return slow->next;
}
// 否则,找到倒数第k个节点,然后更新它的前一个节点为下一个节点
while (fast->next != NULL) {
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return *head;
}
```
这个函数会返回删除倒数第i个节点后的链表头结点。
阅读全文