当前位置: 首页 > news >正文

力扣刷题——143.重排链表

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln - 1 → Ln

请将其重新排列后变为:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 :

输入:head = [1,2,3,4,5]
输出:[1,5,2,4,3]

我们可以借助寻找链表中间节点和逆置链表的方法来将链表的后半部分逆置然后操作。为什么要这样做呢,因为题目中链表中节点顺序的变化实际上是这样的

我们可以发现,当我们逆置后半部分链表后,实际上就是遍历后半部分链表,将其中的节点逐个按照题目规则插入到前半部分链表中。即:

ListNode *FindMid(ListNode *head)
{
    ListNode *slow=head;
    ListNode *fast=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}
ListNode *reverse(ListNode *p0)
{
    ListNode *p1=nullptr;
    ListNode *p2=p0;
    while(p2)
    {
        ListNode *p3=p2->next;
        p2->next=p1;
        p1=p2;
        p2=p3;
    }
    return p1;
}
    void reorderList(ListNode* head) {
        ListNode *mid=FindMid(head);
        ListNode *head2=reverse(mid);
        while(head2->next)
        {
            ListNode *nxt1=head->next;
            ListNode *nxt2=head2->next;
            head->next=head2;
            head2->next=nxt1;
            head=nxt1;
            head2=nxt2;
        }
        
    }

相关文章:

  • 如何利用环境监控看板提升工厂生产质量和效率
  • 《信息系统安全》(第一次上机实验报告)
  • 无需邀请码,实在智能发布通用智能体-实在Agent
  • 智能,触手可及:揭秘高灵活、高精度仿生机器手的操作与实现
  • django怎么配置404和500
  • 【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】
  • 【实操】Mybatis-plus2.x升级到3.x
  • 基于深度学习的运动想象脑电信号分类研究
  • django如何配置使用asgi
  • LDAP从入门到实战:环境部署与配置指南(上)
  • 使用 Tkinter 编写简单计算器应用
  • JAVA多线程编程技术
  • 可发1区的超级创新思路:
  • LeetCode Hot100 刷题路线(Python版)
  • IoTDB写入数据后data目录为空
  • python爬虫解析器bs4,xpath,pquery
  • HR人员和组织信息同步AD域服务器实战方法JAVA
  • 基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践
  • 知识蒸馏:让大模型“瘦身“而不失智慧的魔术
  • Spark读取文件系统的数据(sbt打包测试)-入门级别Demo
  • 邯郸一酒店办婚宴发生火灾,新郎母亲:饭没吃成酒店还要收费
  • 图集︱“中国排面”威武亮相
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 《中国人民银行业务领域数据安全管理办法》发布,6月30日起施行
  • 涨知识|没想到吧,体育老师强调的运动恢复方法是错的?
  • 心相印回应官方旗舰店客服辱骂消费者:正排查