C语言写单链表的逆置
时间: 2025-05-04 10:43:24 浏览: 27
### 单链表逆置的实现方法
在 C 语言中,可以通过迭代的方式实现单链表的逆置。以下是详细的说明以及代码示例。
#### 实现思路
为了逆置单链表,可以采用三指针法:`prev`、`current` 和 `next`。初始状态下,`prev` 设置为 `NULL`,而 `current` 指向头节点。通过遍历整个链表,在每次循环中调整当前节点的指向关系,使其反向连接到前一节点上[^1]。
#### 定义结构体
定义一个表示链表节点的结构体 `struct Node`,其中包含数据域和指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
#### 创建新节点
创建一个新的链表节点并初始化其值:
```c
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
```
#### 插入节点至头部
将新建的节点插入到链表头部以便于构建顺序相反的列表:
```c
void insertAtHead(Node** headRef, Node* newNode) {
newNode->next = *headRef;
*headRef = newNode;
}
```
#### 打印链表
用于显示链表中的所有元素:
```c
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
```
#### 链表逆置函数
这是核心部分,负责反转给定链表的方向:
```c
Node* reverseList(Node* head) {
Node* prev = NULL;
Node* current = head;
Node* next = NULL;
while (current != NULL) {
next = current->next; // 记录下一节点
current->next = prev; // 反转当前节点的链接方向
prev = current; // 移动 prev 到当前节点位置
current = next; // 继续处理剩余未访问过的节点
}
return prev; // 返回新的头结点
}
```
#### 主程序测试
下面是一个完整的例子展示如何使用上述功能完成链表的创建与逆置操作,并验证结果是否正确无误[^2]。
```c
#include <stdio.h>
#include <stdlib.h>
// 结构体声明省略...
int main() {
Node* head = NULL;
// 构建链表
for (int i = 5; i > 0; i--) {
Node* newNode = createNode(i);
insertAtHead(&head, newNode);
}
printf("原始链表:");
printList(head);
// 调用逆置函数
head = reverseList(head);
printf("逆置后的链表:");
printList(head);
return 0;
}
```
运行此代码后,控制台上会先显示出原样排列好的链表序列,接着再呈现经过翻转处理过的新版序号列阵形式输出。
阅读全文
相关推荐

















