请用C语言编写一个程序,给一个链表,删除链表的倒数第i个节点,并返回链表头节点,不要用typedef struce
时间: 2024-09-18 16:18:57 浏览: 47
在C语言中,我们通常会使用结构体(struct)来表示链表。这里是一个简单的示例,展示如何创建一个链表节点以及删除倒数第i个节点。首先,我们需要定义一个链表节点的结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除倒数第i个节点的函数
Node* delete_i_th_from_end(Node* head, int i) {
if (head == NULL || i <= 0) {
return head; // 如果链表为空或i无效,则直接返回
}
Node* current = head;
int length = 1; // 初始化链表长度
while (current->next != NULL) {
current = current->next;
length++; // 遍历链表找到实际长度
}
if (length == i) { // 如果i等于链表长度,说明倒数第i个就是头节点,不需要删除
return head;
} else if (length - i > 1) { // 找到需要删除的位置
for (int j = 0; j < length - i - 1; j++) {
current = current->next;
}
current->next = current->next->next; // 将倒数第i个节点的下一个节点接在其前一个节点之后
}
return head;
}
// 测试示例
void print_list(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 创建测试链表
Node* list = malloc(sizeof(Node));
list->data = 1;
list->next = malloc(sizeof(Node));
list->next->data = 2;
list->next->next = malloc(sizeof(Node));
list->next->next->data = 3;
list->next->next->next = malloc(sizeof(Node));
list->next->next->next->data = 4;
list->next->next->next->next = NULL;
printf("Original List: ");
print_list(list);
int i = 2; // 要删除的节点索引
list = delete_i_th_from_end(list, i);
printf("List after deleting %dth node from end: ", i);
print_list(list);
return 0;
}
```
这个程序首先创建了一个包含四个节点的链表,然后尝试删除倒数第二个节点(索引为2)。运行此程序,你会看到原始链表和修改后的链表。
阅读全文