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

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

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

   

    }
相关推荐
玖剹8 小时前
记忆化搜索题目(二)
c语言·c++·算法·leetcode·深度优先·剪枝·深度优先遍历
gugugu.9 小时前
Redis ZSet类型深度解析:有序集合的原理与实战应用
网络·windows·redis
Xy-unu9 小时前
[LLM]AIM: Adaptive Inference of Multi-Modal LLMs via Token Merging and Pruning
论文阅读·人工智能·算法·机器学习·transformer·论文笔记·剪枝
Hcoco_me9 小时前
算法选型 + 调参避坑指南
算法
Jul1en_9 小时前
【算法】分治-归并类题目
java·算法·leetcode·排序算法
kangk129 小时前
统计学基础之概率(生物信息方向)
人工智能·算法·机器学习
再__努力1点9 小时前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
唯唯qwe-10 小时前
Day22: 贪心算法 | 区间问题,左/右端点排序
算法·贪心算法
Hcoco_me10 小时前
LLM(Large Language Model)系统学习路线清单
人工智能·算法·自然语言处理·数据挖掘·聚类
java修仙传10 小时前
力扣hot100:寻找旋转排序数组中的最小值
算法·leetcode·职场和发展