C语言链表反转函数解析:struct ListNode *reverse(struct ListNode *head)
C语言链表反转函数解析:struct ListNode *reverse(struct ListNode *head)
该函数用于将单链表反转,函数参数为链表的头节点指针head,返回反转后的链表的头节点指针。
struct ListNode *reverse(struct ListNode *head) {
// 创建两个指针,prev指向前一个节点,curr指向当前节点
struct ListNode *prev = NULL;
struct ListNode *curr = head;
// 循环遍历链表,直到curr指向最后一个节点
while (curr != NULL) {
// 创建一个指针next,指向当前节点的下一个节点
struct ListNode *next = curr->next;
// 将当前节点的next指针指向前一个节点,实现反转
curr->next = prev;
// 更新prev和curr指针,分别指向当前节点和下一个节点
prev = curr;
curr = next;
}
// 返回反转后的链表的头节点
return prev;
}
代码解析
-
创建指针: 首先创建两个指针
prev和curr,分别指向链表的前一个节点和当前节点。初始情况下,prev为NULL,curr指向链表头节点。 -
循环遍历: 使用
while循环遍历链表,直到curr指向链表的最后一个节点(即curr为NULL)。 -
创建next指针: 在循环内部,创建指针
next,指向当前节点curr的下一个节点,用于保存后续节点的信息。 -
反转操作: 将当前节点
curr的next指针指向前一个节点prev,实现反转操作。 -
更新指针: 更新
prev和curr指针,分别指向当前节点curr和下一个节点next,以便进行下一轮循环。 -
返回头节点: 循环结束后,
prev指针指向反转后的链表的头节点,因此返回prev。
总结
通过逐个节点反转next指针指向,将链表的顺序反转。该方法简单易懂,效率较高,是常用的链表反转方法之一。
原文地址: https://www.cveoy.top/t/topic/f2q2 著作权归作者所有。请勿转载和采集!