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

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

涉及到双指针找链表中点,头插法逆转链表的基本链表操作,具体将在代码中演示,这里我们选择不把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;

   

    }
相关推荐
奋发向前wcx2 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
念何架构之路5 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
汤姆yu5 小时前
Gemini 4 Argon模型综述:技术、能力与实际使用指南
网络·安全·web安全·ai·大模型
晒太羊的猫6 小时前
hot100动态规划刷题
算法·动态规划
Seraphina366 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
weixin_531094696 小时前
heap_4内存管理
java·开发语言·算法
余额瞒着我当琳6 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
程序员南飞6 小时前
win系统安装minio
java·数据结构·算法
青少儿编程课堂6 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
2401_868534786 小时前
无线网络规划设计
服务器·网络