AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 143. Reorder List    原题链接    简单

作者: 作者的头像   龙虾海3魔 ,  2025-04-25 22:56:36 · 陕西 ,  所有人可见 ,  阅读 2


0


思路

首先将链表一份为二,首先对链表进行计数,cnt。如果cnt小于等于二说明不用更改直接返回。
否则找到将链表一分为二,循环(cnt + 1) / 2-1次,得到前一个链表的最后一个节点mid。
获取到下一个链表的第一个结点later,再把mid的next变为nullptr,对later进行反转。
反转前将cnt赋值为0,计算后一链表的长度最后决定应该执行几次插入操作。

C++ 代码

class Solution {
public:
    void reorderList(ListNode* head) {
        int cnt = 0;
        for (auto i = head; i; i = i->next) cnt ++;
        if (cnt <= 2) return;

        auto mid = head;
        for (int i = 1; i < (cnt + 1) / 2;i ++) mid = mid->next;

        cnt = 0;
        auto later = mid->next;
        mid->next = nullptr;
        ListNode* pre = nullptr;
        while (later){
            auto ne = later->next;
            later->next = pre;
            pre = later, later = ne;
            cnt ++;
        }

        for (int i = 0; i < cnt; i ++){
            later = pre->next;
            pre->next = head->next;
            head->next = pre;
            head = pre->next;
            pre = later;
        }

    }
};

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息