单链表的就地逆置c语言
时间: 2024-09-19 15:09:02 浏览: 55
单链表的就地逆置(In-place Reversal)是指不额外分配内存,直接修改原链表节点,使其按相反顺序排列。在C语言中,可以使用三个指针,两个用于遍历链表,一个作为临时存储,步骤大致如下:
1. 定义两个指针,`prev` 和 `current`,初始化为 `NULL` 和链表头节点。
2. 当 `current` 不为 `NULL` 时,执行以下操作:
- 将 `current` 的下一个节点赋值给 `temp`(暂时存储)
- 更新 `current` 指向 `prev`
- 将 `prev` 指向 `current`
3. 继续移动 `current` 和 `prev`,直到 `current` 为空。
4. 最后,链表的头节点现在指向原来的尾节点,实现了逆置。
这是一个简化的伪代码示例:
```c
struct ListNode {
int val;
struct ListNode *next;
};
void reverseList(struct ListNode **head) {
if (*head == NULL || (*head)->next == NULL) return; // 如果链表只有一个元素或为空,无需反转
struct ListNode *prev = NULL, *current = *head, *temp;
while (current != NULL) {
temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 现在当前节点的next指向前一个节点
prev = current; // 更新前驱节点
current = temp; // 移动到下一个节点
}
*head = prev; // 新的头节点就是原链表的尾节点
}
```
阅读全文