反转单链表
题目链接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEpyMc54-1691204429232)(C:/Users/HUASHUO/AppData/Roaming/Typora/typora-user-images/image-20230805100711512.png)]](https://img-blog.csdnimg.cn/1ecaf254011a4e6b9e4577790e7b9013.png)
下面主要介绍两种方法:
方法一:
利用三个指针变量进行反转
具体过程如图所示:

注意:循环的结束的条件为cur == NULL而不是next == NULL
实现代码:
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newHead = NULL;
struct ListNode* cur = head;
while (cur)
{
struct ListNode* curNext = cur->next; //如果next放在循环外面定义,就不好控制循环结束条件
cur->next = newHead;
newHead = cur;
cur = curNext;
}
return newHead;
}
方法二:
利用哨兵位实现反转
具体过程如图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V7c4iaub-1691204429233)(C:/Users/HUASHUO/AppData/Roaming/Typora/typora-user-images/image-20230805105036764.png)]](https://img-blog.csdnimg.cn/ef2127f20d504e94a250c07b2f92d682.png)
注1:循环结束的条件为cur->next == NULL
注2:返回之前要将哨兵位释放,防止内存泄露
实现代码:
struct ListNode* reverseList(struct ListNode* head)
{
//如果链表为空,直接退出,返回NULL
if (head == NULL)
return NULL;
//创建哨兵为
struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
newHead->next = head;
//实现反转
struct ListNode* cur = head;
while (cur->next)
{
struct ListNode* curNext = cur->next;
cur->next = curNext->next;
curNext->next = newHead->next;
newHead->next = curNext;
}
//释放哨兵位,返回新的头
struct ListNode* retHead = newHead->next;
free(newHead);
return retHead;
}




![[Realtek sdk-3.4.14b]RTL8197FH-VG+RTL8812F WiFi开启访客网络之后无法扫描到SSID问题分析及解决方案](https://img-blog.csdnimg.cn/1479a3b3c5834639a6c070bf80af0502.png)














