使用C语言逆转单链表,不新建链表
时间: 2024-09-07 10:06:31 浏览: 29
在C语言中逆转单链表,需要通过遍历原链表并调整节点的指针方向来实现。具体步骤如下:
1. 初始化三个指针,分别为`prev`(指向当前节点的前一个节点,初始值设为NULL),`curr`(指向当前节点,初始值设为链表头),以及`next`(用于临时存储当前节点的下一个节点)。
2. 遍历链表,对于每个节点,执行以下操作:
- 先将`next`指针指向`curr->next`,保存下个节点的位置。
- 将`curr->next`指针指向前一个节点`prev`,完成当前节点指针的反转。
- 更新`prev`和`curr`指针,`prev`移动到`curr`的位置,`curr`移动到`next`的位置。
3. 当`curr`指针为空时,表示已经到达链表尾部,此时`prev`指针指向新的链表头。
以下是使用C语言实现单链表逆转的一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 函数逆转链表
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL;
struct ListNode *curr = head;
struct ListNode *next = NULL;
while (curr != NULL) {
next = curr->next; // 保存下一个节点
curr->next = prev; // 反转当前节点的指针
prev = curr; // 移动prev到当前节点
curr = next; // 移动curr到下一个节点
}
head = prev; // 更新头指针为新的头节点
return head;
}
// 其他辅助函数(创建节点、打印链表等)可以根据需要添加
// ...