每日一题——反转单链表

简介: 每日一题——反转单链表

反转单链表

题目链接

下面主要介绍两种方法:


方法一:

利用三个指针变量进行反转

具体过程如图所示:

注意:循环的结束的条件为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;
}

方法二:

利用哨兵位实现反转

具体过程如图所示:

注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;
}
相关文章
|
前端开发 应用服务中间件 nginx
docker部署本地前端项目思路
docker部署本地前端项目思路
336 7
|
机器学习/深度学习
一个偶数总能表示为两个素数之和
【10月更文挑战第10天】一个偶数总能表示为两个素数之和。
114 2
|
监控 算法 Java
Java中的垃圾回收机制详解
本文旨在深入探讨Java中的垃圾回收机制,揭示其工作原理、主要算法及其在性能优化中的重要性。通过详细的分析,我们将理解如何利用垃圾回收来管理内存资源,提高应用程序的稳定性和效率。
177 7
|
网络协议 安全 搜索推荐
【网络安全 | 子域名/信息收集】子域名挖掘方式总结(全网最详细)
【网络安全 | 子域名/信息收集】子域名挖掘方式总结(全网最详细)
2155 0
|
计算机视觉 Python
OpenCV竟然可以这样学!成神之路终将不远(十三)
OpenCV竟然可以这样学!成神之路终将不远(十三)
131 0
|
机器学习/深度学习 搜索推荐 算法
冬季实战营第五期学习报告
冬季实战营第五期学习报告
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
148 0
push,pop指令
push,pop指令
457 0
|
编解码 开发工具 Windows
案例分享:Qt管道焊接参数条码打印系统(条码打印机TSC 244 Pro、打印条码、打印中文、打印字符、多张连续打印)
案例分享:Qt管道焊接参数条码打印系统(条码打印机TSC 244 Pro、打印条码、打印中文、打印字符、多张连续打印)
案例分享:Qt管道焊接参数条码打印系统(条码打印机TSC 244 Pro、打印条码、打印中文、打印字符、多张连续打印)
LDU20级新生排位赛第三场
LDU20级新生排位赛第三场
176 0