剑指 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); } };
思路如图,关键点是,以不同的眼光看链表,不要只是单向审视。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理