请用C语言编写一个程序,给一个链表,删除链表的倒数第i个节点,并返回链表头节点
时间: 2024-09-18 14:19:00 浏览: 51
c语言-c语言编程基础之leetcode题解第19题删除链表的倒数第N个结点.zip
在C语言中,我们可以创建一个单链表结构以及相关的函数来完成这个任务。首先,我们定义链表节点的数据结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,我们需要一个函数来创建链表,插入节点,找到链表长度,以及删除倒数第i个节点。这里是一个基本的示例:
```c
Node* createList(int arr[], int n) {
Node* head = NULL;
for (int i = 0; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = head;
head = newNode;
}
return head;
}
// 返回链表长度
int getLength(Node* head) {
int count = 0;
while (head != NULL) {
count++;
head = head->next;
}
return count;
}
// 删除倒数第i个节点
Node* deleteLastKth(Node* head, int k) {
if (head == NULL || k <= 0) {
return head;
}
Node* dummy = (Node*)malloc(sizeof(Node)); // 创建虚拟头节点
dummy->next = head;
Node* prev = dummy, *current = head;
int list_len = getLength(head);
for (int i = 0; i < list_len - k; i++) {
current = current->next;
}
if (current == NULL) { // 如果k大于链表长度,则没有倒数第k个节点
free(dummy);
return head;
}
prev->next = current->next;
free(current); // 释放被删除节点的内存
return dummy->next; // 更新链表头并返回
}
```
在这个示例中,`createList`用于创建一个包含数组元素的链表,`getLength`用于计算链表长度,而`deleteLastKth`则负责删除倒数第k个节点。
阅读全文