c语言中单链表的逆置
时间: 2024-06-30 19:01:09 浏览: 133
单链表的逆置(c语言)
在C语言中,单链表的逆置可以通过迭代或递归两种方式实现。这里我们主要介绍迭代方法,因为它通常更高效且不会消耗额外的栈空间。
**迭代法(非递归)逆置单链表:**
1. 定义两个指针,`prev` 和 `current`,初始化为 `NULL` 和链表的头节点。
2. 当 `current` 不为 `NULL` 时,执行以下操作:
- 将 `current` 的下一个节点指向 `prev`,即 `current->next = prev`。
- 更新 `prev` 为 `current`,`current` 为 `current->next`。
3. 当循环结束时,`prev` 就会成为新的头节点,原头节点 `head` 就是新链表的尾部。
**代码示例:**
```c
struct Node {
int data;
struct Node* next;
};
void reverseList(struct Node** head) {
if (*head == NULL || (*head)->next == NULL) {
return; // 如果链表为空或只有一个元素,无需逆置
}
struct Node* prev = NULL, *current = *head;
while (current != NULL) {
struct Node* temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 移动prev到current
current = temp; // 移动current到下一个节点
}
*head = prev; // 更新头节点为逆序后的头
}
```
阅读全文