用c语言写一个实现单链表逆序链接的函数
时间: 2024-12-16 09:17:22 浏览: 2
在C语言中,我们可以使用迭代或递归的方式来实现单链表的逆序操作。这里是一个简单的迭代方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数声明
Node* reverseList(Node* head);
// 主要函数,创建并返回逆序后的链表头结点
Node* reverseListIterative(Node* head) {
Node* prev = NULL; // 初始化前驱指针为空
Node* current = head; // 初始化当前指针为头节点
while (current != NULL) { // 当链表非空
Node* temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点指向前驱
prev = current; // 前驱节点移动到当前节点
current = temp; // 当前节点移到下一个未处理的节点
}
return prev; // 返回新的头节点
}
// 测试函数
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 创建一个链表示例
Node* head = createLinkedList({1, 2, 3, 4, 5}); // 假设createLinkedList函数已实现
printf("Original List:\n");
printList(head);
// 反转链表
head = reverseListIterative(head);
printf("\nReversed List:\n");
printList(head);
return 0;
}
// 这里假设createLinkedList函数用于创建一个带数据的链表,并将最后一个节点设置为NULL
Node* createLinkedList(int arr[]) {
// ... 实现链表创建代码 ...
}
```
在这个代码中,`reverseListIterative`函数通过改变每个节点的`next`指针来逆序链表。在主函数中,我们先打印原链表,然后调用逆序函数,再打印逆序后的链表。
阅读全文