题解 | #重排链表# C++O(1)空间 递归写法

重排链表

http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

思路其实挺简单的.

我们需要将头结点率先链接至尾节点.并且为了可持续性地将tail = tail -> pre.

在O(1)空间的情况下,使用递归是最好的选择.

使用一个全局变量保存为当前链的起始头部.而递归则是最先处理最尾部的节点

//这里我们只考虑最后一个节点5,是如何被放入头结点的.
/*
 此时的状态:
 		root->{1,2,3,4,5}
        tmp->{2,3,4,5}
        now->{4,5}
*/
root->next = now->next
/*
 此时的状态:
 		root->{1,5}
        tmp->{2,3,4,5}
        now->{4,5}
*/
root->next->next = tmp
/*
 此时的状态:
 		root->{1,5,2,3,4,5,2,3,4,5,2,3,4,5,...}
        tmp->{2,3,4,5,2,3,4,5,2,3,4,5,...}
        now->{4,5,2,3,4,5,2,3,4,5,...}
//可见,不将4,5断开后患无穷.
*/
now->next = nullptr;
/*
 此时的状态:
 		root->{1,5,2,3,4}
        tmp->{2,3,4}
        now->{4}
*/
root = tmp;
/*
此时的状态:
 		root->{2,3,4}
        tmp->{2,3,4}
        now->{4}
那么下一次运行时最尾端的节点就是 4,起始点就是2了
*/
//


class Solution {
public:
    ListNode* root;
    int len=0;
    void dfs(ListNode *now,int pos)
    {
        //用于记录总长度.
        len++;
        if(now->next==nullptr)return;
        //先让程序跑到最终点
        dfs(now->next,pos+2);
        //如果现在属于链表的前一半则不需要交换
        if(pos<len)return;
        auto tmp = root->next;
        root->next=now->next;
        root->next->next=tmp;
        now->next = nullptr;
        root=tmp;
    }
    
    void reorderList(ListNode *head) {
        if(head==nullptr)return ;
        root = head;
        dfs(head,1);
    }
};
全部评论
emmmmmm,可是这个运行的时候占内存还挺多的
点赞 回复 分享
发布于 2022-09-08 18:21 广东

相关推荐

不愿透露姓名的神秘牛友
03-20 12:46
瘦嘟嘟右卫门:百度文库网盘的暑期也没约面吗
点赞 评论 收藏
分享
头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
嵌入式的小白:不错啊,淘天也是挺好的,恭喜
我的求职进度条
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务