链表算法综合——重排链表

此题意就是先把链表一分为二,然后把后半链表逆序并交替插入前半链表中

涉及到双指针找链表中点,头插法逆转链表的基本链表操作,具体将在代码中演示,这里我们选择不把slow指针分割成后半进行逆序而是放在前半,因为最终结果slow和前一个的位置一直不变(如果放在后也可以)

cpp 复制代码
void reorderList(ListNode* head) {
    //以下情况不需要改变原链表
    if(head==nullptr||head->next==nullptr||head->next->next==nullptr) return;

      //找到中间节点
    ListNode*slow=head,*fast=head;
     while(fast&&fast->next)
   {
     slow=slow->next;
      fast=fast->next->next;
   }
    //分割链表
    ListNode*head2=new Listnode(0);
    ListNode*cur=slow->next;
    slow->next==nullptr;
   
     //逆序后链表
 
    while(cur)
    {
      ListNode*next=cur->next;
      cur->next=head2->next;
        head2->next=cur;
      cur=next;
    }
   
     //插入

   ListNode*ret=new ListNode(0);
   ListNode*prev=ret;
   ListNode*cur1=head,*cur2=head2->next;
    while(cur1)
   {
      prev->next=cur1;
     cur1=cur1->next;
    prev=prev->next;
    
    if(cur2)
    {
      prev->next=cur2;
    cur2=cur2->next;
     prev=prev->next;
    }
   }
   
 delete head2;
  delete ret;

   

    }
相关推荐
wyzqhhhh4 分钟前
WebSocket
网络·websocket·网络协议
多喝开水少熬夜5 分钟前
堆相关算法题基础-java实现
java·开发语言·算法
锂享生活9 分钟前
论文阅读:铁路车辆跨临界 CO₂ 空调系统模型预测控制(MPC)策略
论文阅读·算法
B站_计算机毕业设计之家17 分钟前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
爱莉希雅&&&22 分钟前
DNS分离解析案例
运维·网络·dns
骑自行车的码农42 分钟前
React SSR 技术实现原理
算法·react.js
盘古开天166642 分钟前
深度强化学习算法详解:从理论到实践
算法
铭哥的编程日记1 小时前
【Linux网络】五种IO模型与非阻塞IO
linux·服务器·网络·tcp/ip·udp
snakecy1 小时前
二叉树、动态规划与链表学习
学习·链表·动态规划
Mr.H01271 小时前
快速排序的常见构思
数据结构·算法