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

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

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

   

    }
相关推荐
ting94520005 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
吴声子夜歌6 小时前
Java面试——算法
java·算法·面试
h_a_o777oah6 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy6 小时前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2087 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲8 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
梦想的旅途29 小时前
企业微信Webhook:自动回复为什么会连发
网络·安全·企业微信
AI备案指南-满满10 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
SLD_Allen10 小时前
字节跳动飞连(Feilian)AI智能体零信任安全治理深度技术研究报告
网络·人工智能·安全·智能体安全