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

力扣刷题——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;
        }
        
    }


http://www.kler.cn/a/594963.html

相关文章:

  • 多数据源@DS和@Transactional踩坑之路
  • 【负载均衡系列】Nginx
  • 到底爱不爱我
  • stm32-定时器
  • GITLAB部署安装教程
  • JNI介绍
  • 算法及数据结构系列 - 二分查找
  • 游戏引擎学习第172天
  • 深度解析历年蓝桥杯算法题,助力提升编程技能
  • Saga 模式实战 Demo
  • Compose 实践与探索十五 —— 自定义触摸
  • Prometheus Exporter系列-Postgres_Exporter一键部署
  • Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)
  • Python 单例模式的 5 种实现方式:深入解析与最佳实践
  • 如何给商品一键换色?图生生AI,告别繁琐修图
  • 【Dify平台】Function Call 模式模式和ReAct模型有什么不同?
  • Compose 实践与探索十六 —— 与传统的 View 系统混用
  • Q2 电商订单数据分析优化
  • QT Quick(C++)跨平台应用程序项目实战教程 3 — 项目基本设置(窗体尺寸、中文标题、窗体图标、可执行程序图标)
  • uniapp整合SQLite(Android)