设计一个算法,通过一趟遍历,将链表中所有结点的链接方向逆转,且仍 利用原表的存储空间。c语言
时间: 2024-09-26 21:02:59 浏览: 43
设计一个反转单向链表的算法,可以在不额外分配存储空间的情况下完成这个操作。以下是使用C语言的一个简单步骤:
```c
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
// 反转链表的函数
void reverseList(struct Node** head) {
struct Node* prev = NULL;
struct Node* current = *head;
struct Node* temp;
// 遍历整个链表
while (current != NULL) {
// 记录当前节点并指向下一个节点
temp = current->next;
// 更新当前节点的下一个指针
current->next = prev;
// 移动prev和current到下一位
prev = current;
current = temp;
}
// 当遍历结束后,prev就是新的头节点
*head = prev;
}
```
在这个算法中,我们利用三个指针 `prev`、`current` 和 `temp`,其中 `prev` 指向当前节点的前一个节点,`current` 初始指向头节点,然后每次迭代都改变 `current` 的 `next` 指针使其指向 `prev`,最后 `prev` 就会成为新链表的头。
阅读全文