每日一题——反转单链表

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

反转单链表

题目链接

下面主要介绍两种方法:


方法一:

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

具体过程如图所示:

注意:循环的结束的条件为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;
}
相关文章
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——反转链表
|
7月前
|
算法
【每日一题】牛客网——链表的回文结构
【每日一题】牛客网——链表的回文结构
|
7月前
牛客网-反转链表
牛客网-反转链表
30 0
PTA猴子选大王(约瑟夫环问题)
PTA猴子选大王(约瑟夫环问题)
134 1
leetCode206 - 反转单链表
leetCode206 - 反转单链表
61 0
|
Java Python
LeetCode每日一题-1:反转链表
LeetCode每日一题-1:反转链表
|
算法
『牛客|每日一题』循环队列
基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦 https://www.nowcoder.com/link/pc_csdncpt_ll_sf
112 0
|
算法
每日一题之约瑟夫问题
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
91 0
【每日一题】力扣之反转链表II
此文章用于每日一题打卡所以先水一些 蓝桥比完再详细些
96 0