设有一个表头指针为HEAD的单链表。试用C语言设计一个算法,通过遍历一趟链表,将链表中所有节点的链接方向逆转。要求逆转结果中链表的表头指针HEAD指向原链表的最后一个节点
时间: 2024-10-02 15:02:46 浏览: 64
你可以使用迭代的方式来解决这个问题,步骤如下:
定义两个指针
prev
和current
,初始时都指向HEAD
,因为prev
将会保存当前节点的前一个节点,而current
则用于遍历。创建一个新的临时变量
temp
,它将在每次迭代中存储current
的下一个节点,以便后续可以改变current
的next指针。开始循环,当
current
不为空时,执行以下操作:- 将
current
的next指针设置为prev
,即改变当前节点的链接方向,使其指向前一个节点。 - 更新
prev
为current
,准备处理下一个节点。 current
向后移动一步,变成current = current->next
。
- 将
循环结束后,
prev
会成为新链表的最后一个节点,所以最后将HEAD
更新为prev
。
以下是这个过程的伪代码表示:
void reverseList(struct ListNode* HEAD) {
struct ListNode* prev = HEAD;
struct ListNode* current = HEAD->next;
while (current != NULL) {
// 反转当前节点的链接方向
current->next = prev;
// 更新指针位置
prev = current;
current = current->next;
}
// 更新表头指针为新的最后一个节点
HEAD = prev;
}
相关推荐


















