labuladong日常刷题-递归魔法 | LeetCode 206反转链表 92反转链表-ii
2023-12-26 16:47:29
递归魔法
LeetCode 206 反转链表 2023.12.26
ListNode* reverseList(ListNode* head) {
//递归退出条件
if(head == NULL || head->next == NULL)
return head;
//递归
ListNode* last = reverseList(head->next);
//处理
head->next->next = head;//指向反转
head->next = NULL;//指向最后空指针
return last;//返回链表最后一个节点
}
LeetCode 92 反转链表-ii 2023.12.26
class Solution {
public:
//反转区间链表的递归函数
ListNode* reverseBetween(ListNode* head, int left, int right) {
//遍历区间元素,递归退出条件,
//当从head开始反转时,直接进入从头反正right个元素的递归函数
if(left == 1)
return reverseN(head, right);
//head指向的下一个元素来自下一次递归,起始元素是head->next,区间是left-1,right-1
head->next = reverseBetween(head->next, left-1, right-1);
return head;
}
//用来记录后面不翻转的第一个节点
ListNode* successor = NULL;
//反转从head开始right个节点的递归函数
ListNode* reverseN(ListNode* head, int right)
{
//递归退出条件,当反转的节点为一个(为head节点)时,
//记录后面不翻转的第一个节点,并返回当前反转后的head节点
if(right == 1)
{
successor = head->next;
return head;
}
//记录反转后的首节点
ListNode* last = reverseN(head->next, right-1);
//反转中间节点
head->next->next = head;
head->next = successor;
//返回反转后的首节点
return last;
}
};
文章来源:https://blog.csdn.net/weixin_66706867/article/details/135220908
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!