设有一个表头指针为HEAD的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有节点的链接方向逆转。要求逆转结果中链表的表头指针HEAD指向原链表的最后一个节点。C语言程序设计
时间: 2024-09-30 09:14:25 浏览: 32
链表_链表_用链表将两个数组升序合并到另一个数组_
在C语言中,可以使用迭代的方式来实现这个链表反转的操作。这里是一个简单的步骤描述:
1. 定义三个指针:prev、current 和 next,初始时,prev 指向 NULL,current 指向 HEAD。
2. 当 current 非空时,进入循环:
a. 将 current 的下一个节点赋值给 next(即 current->next)。
b. 将 current 的下一个节点的指针改为当前节点(current->next = prev)。
c. 更新 prev 和 current,prev 现在指向当前节点(prev = current),current 指向下下个节点(current = next)。
3. 循环结束后,prev 就会指向新的表头,也就是原来的尾部,所以我们设置新的表头为 prev(HEAD = prev)。
以下是伪代码形式:
```c
void reverseList(Node* HEAD) {
Node *prev = NULL, *current = HEAD;
while (current != NULL) {
Node *next = current->next; // 存储当前节点的下一个节点
current->next = prev; // 反转当前节点的指针
prev = current; // 更新prev为current
current = next; // 更新current为next
}
HEAD = prev; // 新表头指向原尾部
}
```
阅读全文