算法实现带头结点的单链表的就地逆置。c语言
时间: 2024-10-14 08:14:02 浏览: 45
反转链表(不带头结点)
在C语言中,可以使用迭代的方式实现带头结点的单链表就地逆置,即原地修改链表节点指针,而不需要额外的空间。下面是一个简单的算法步骤:
1. 定义两个指针,`prev` 和 `current`,初始化为头结点。
2. 当 `current` 不为空时,执行以下操作:
a. 将 `current->next` 的指针临时保存到 `temp` 中。
b. 更新 `current->next` 指向 `prev`。
c. 移动指针,将 `prev` 赋值给 `current`,`current` 向前移动一位。
d. `temp` 再次指向 `current->next`,继续更新下一对节点。
3. 最后,`prev` 就会成为新链表的头结点。
以下是对应的C语言伪代码实现:
```c
struct Node {
int data;
struct Node* next;
};
void reverseList(struct Node** head) {
if (*head == NULL || (*head)->next == NULL) {
return; // 如果链表只有一个元素或为空,则无需反转
}
struct Node* prev = *head;
struct Node* current = (*head)->next;
struct Node* temp;
while (current != NULL) {
temp = current->next;
current->next = prev;
prev = current;
current = temp;
}
(*head) = prev; // 更新头结点
}
```
阅读全文