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

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

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

   

    }
相关推荐
xy345324 分钟前
wireshark 如何捕获信息
网络·测试工具·渗透测试·wireshark
Kx_Triumphs1 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎2 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
玖玥拾2 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
轻颂呀3 小时前
约瑟夫环问题
算法
一个有温度的技术博主3 小时前
【VulnHub 实战】DC-1 靶机渗透测试笔记(一):信息收集与主机发现
服务器·网络·笔记
白帽小阳4 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
科技大视界4 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴5 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法