题目

给定一个单链表的头部节点head,链表长度为N,如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区;如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区。左半区从左到右依次为L1->L2->L3->...., 右半区从左到右依次记为R1->R2->..., 请将单链表调整成L1->R1->L2->R2->... 的形式


思路

  1. 如果链表长度为空或者长度为1,不用调整,直接结束
  2. 若长度大于1,遍历一遍找到左半区的最后一个节点,记为mid。例如:1->2 mid:1; 1->2->3 mid:1; 1->2->3->4 mid:2
  3. 找到mid后,就可以将链表分为左右半区两个链表(mid.next=null),分别记为left(head)和right(原来的mid.next)
  4. 合并两个链表

源码

public static class Node{public int value;public Node next;public Node(int data){this.value=data;}
}
public void relocate(Node head){if(head==null || head.next=null){return;}Node mid=head;Node right=head.next;while(right.next!=null&&right.next.next!=null){mid=mid.next;right=right.next.next;}right=mid.next;mid.next=null;mergeLR(head,right)}public void mergeLR(Node left,Node right){Node next=null;while(left.next!=null){next=right.next;right.next=left.next;left.next=right;left=right.next;right=next;}left.next=right;}

链表问题20——按照左右半区的方式重新组合单链表相关推荐

  1. 按照左右半区的方式重新组合单链表

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中"按照左右半区的方式重新组合单链表"这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单 ...

  2. [编程题] 按照左右半区的方式重新组合单链表

    [编程题] 按照左右半区的方式重新组合单链表 给定一个单链表的头部节点head,链表长度为N. 如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区: 如果N为奇数,那么前N/2个节点 ...

  3. 牛客网--按照左右半区的方式重新组合单链表

    题目描述 给定一个单链表的头部节点 head,链表长度为 N,如果 N 是偶数,那么前 N / 2 个节点算作左半区,后 N / 2 个节点算作右半区:如果 N 为奇数,那么前 N / 2 个节点算作 ...

  4. c语言递增20,2020-07-20(C语言)数据结构-在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素...

    //在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素,例如:(7,10,10,21,30,42,42,51,70)将变为(7,10 ...

  5. 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序

    删除单链表倒数第K个结点 运行结果: 代码: struct node {int data;node* next;}; //删除链表的倒数第k个结点 bool delet(node*& L, i ...

  6. 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序

    题目介绍 来源:腾讯笔试                         难度系数:★★★☆☆                  考察频率:★★★★☆ 题目描述: 给定一个带头结点的单链表,请将其逆序 ...

  7. 在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素。

    在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素.例如(7,10,10,21,30,42,42,42,51,70)将变为(7, ...

  8. (不带头结点的)单链表增删查改,逆置单链表(两种方法),求两个单链表的第一个公共结点,合并两个单链表,单循环链表中判断第一个入环点,约瑟夫环

    补充了每个算法的基本思想,并且画了思路图,源代码都经过调试成功 1.SlistNode.c文件 (1) (不带头结点的)单链表增删查改 #include "SlistNode.h" ...

  9. 单链表-删除并释放以L为表头指针的单链表的所有结点(双指针法)

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 要删除所有结点,怎么删除? 往往都要定义前后指针 pre ,p 毕竟一 ...

最新文章

  1. android 定时换图片,android 视频和图片切换并进行自动轮播
  2. C++ 判断点是否在圆的内部
  3. android 抛出异常,android - android Build.GetSerial()抛出异常 - 堆栈内存溢出
  4. 海思Hi3516A(5)3D降噪
  5. android获取自适应高度,Android中oncreate中获得控件高度或宽度的实现方法
  6. Docker学习总结(50)——Docker 微服务优雅关闭
  7. [leetcode]_Flatten Binary Tree to Linked List
  8. CentOS7离线安装Nginx(详细安装过程)
  9. ZYF loves set (lca+转化)
  10. 图片标签及以图搜图场景应用
  11. Mac OS X 快捷键(完整篇)
  12. vue+环信客服前端对接
  13. [Mybatis]复杂环境下的SQL
  14. CIO40:企业信息化为什么要进行顶层设计?
  15. opencv imread函数
  16. gazebo打开仿真环境报错gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem
  17. matcher 类 group(int i) shart(int i) end(int i)用法
  18. android微信支付毁掉,android微信支付 需要注意的坑
  19. mysql创建外键级联更新_MySQL使用外键实现级联删除与更新的方法
  20. 华硕笔记本更换操作系统的一波三折的遭遇

热门文章

  1. 程序员该怎么做,才能成为coding王者?
  2. 免费报名 | 机器学习的第二次入门(入群有福利)
  3. 百度高层巨震!陆奇卸任COO,王海峰晋升高级副总裁
  4. 教程 | 用AI生成猫的图片,撸猫人士必备
  5. 送书 | 深入浅出,一起学习贝叶斯!
  6. 捅破砂锅!这位在AI医疗埋头多年的创业者,说出了这些行业真相
  7. 好家伙!JDK16 GA 终于发布,内置 Lombok 的功能,真的顶?
  8. 微服务架构中配置中心的选择
  9. 超美观的 Vue+Element 开源后台管理 UI
  10. 终于放弃了Maven,我选择用Gradle!