剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:

/*
    ListNode * newhead=NULL;
    //返回,已经逆序好的链表的尾节点
    ListNode * dg(ListNode * cur)
    {
        if(cur->next==NULL)return newhead=cur;
        auto nl=dg(cur->next);
        nl->next=cur;
        return cur;
    }

    ListNode* reverseList(ListNode* head) {
        if(head!=NULL)
        {
            dg(head);
            head->next=NULL;
        }
        return newhead;
    }
*/


//null <- 1 <- 2 <- 3 <- 4 <- 5
    //未逆序的链表,已经逆序的链表头
    ListNode * dg(ListNode * cur,ListNode * good)
    {
        if(cur==NULL)return good;
        ListNode *p=dg(cur->next,cur);
        cur->next=good;
        return p;
    }

    ListNode* reverseList(ListNode* head) {
        return dg(head,NULL);
    }

};
复制代码

 

 思路如图,关键点是,以不同的眼光看链表,不要只是单向审视。

posted @   简直可啪  阅读(11)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示