用C语言写一段逆置单链表的函数
时间: 2024-09-21 16:12:24 浏览: 62
在C语言中,我们可以创建一个函数来逆置一个单链表。这里是一个简单的示例,使用迭代方法实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数声明
Node* reverseList(Node* head);
// 递归反转链表的核心函数
Node* reverseHelper(Node* current, Node* prev) {
if (current == NULL) // 如果当前节点为空,返回prev作为新的头
return prev;
Node* temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前一个节点为当前节点
current = temp; // 更新当前节点为原来的下一个节点
return reverseHelper(temp, prev); // 继续处理下一次迭代
}
// 主函数,输入头节点并返回逆序后的头节点
Node* reverseList(Node* head) {
if (head == NULL || head->next == NULL) // 特殊情况,单节点或空链表不需要反转
return head;
Node* newHead = reverseHelper(head, NULL); // 调用核心函数,新头节点为NULL(初始时prev为NULL)
return newHead;
}
// 测试代码
int main() {
Node* list = createLinkedList({1, 2, 3, 4, 5}); // 假设createLinkedList是一个已存在的函数,用于创建链表
list = reverseList(list);
printList(list); // 打印逆序后的链表
return 0;
}
```
这个`reverseList`函数首先检查特殊情况,然后递归地调用`reverseHelper`函数,将当前节点的`next`指向前一个节点,直到遍历完整个链表。
阅读全文