题目:

Given a singly linked list LL0→L1→…→Ln-1→Ln,
reorder it to: L0→LnL1→Ln-1→L2→Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.

思路:

先用快慢指针找到链表的中点,然后翻转链表后半部分,再和前半部分组合。需要注意的是把链表分成两半时,前半段的尾节点要置为NULL,翻转链表时也要把尾节点置为NULL。

注意:后半部分可能比前半部分长,所以最后要判断一下是否将后半部分全部加入链表。

/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {void} Do not return anything, modify head in-place instead.
*/
var reorderList = function(head) {
if(head==null||head.next==null){
return;
}
var l=head,r=head,lpre=null;
while(r!=null&&r.next!=null){
lpre=l;
l=l.next;
r=r.next.next;
}
lpre.next=null;
r=reverseList(l);
var p=head,temp=null,tempr,tail=null;
while(p!=null){
temp=p.next;
tempr=r;
r=r.next;
p.next=tempr;
tail=p.next;
tempr.next=temp;
p=temp;
} if(r!=null){
tail.next=r;
} }; var reverseList = function(head) {
if(head==null||head.next==null){
return head;
}
var temp=null,pre=null,cur=null;
pre=head;
cur=pre.next;
pre.next=null; while(cur!=null){
temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp; } return pre;
};

最新文章

  1. .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
  2. JDBC入门之一--连接Mysql实验
  3. Java基础-final变量和普通变量的区别
  4. Studio右键选项中没有Git?
  5. 标准web架构分层
  6. lvs,haproxy,keepalived,heartbeat
  7. 登陆用户怎样获取验证码和保存用户到cookie中
  8. 享元模式(Flyweight)
  9. System.nanoTime与System.currentTimeMillis的区别(转)
  10. 引擎设计跟踪 ShadowMap 细节和分析
  11. 基本排序算法Golang
  12. BZOJ3566: [SHOI2014]概率充电器 树形+概率dp
  13. Python3 tkinter基础 grid(row,column) 窗体的布局
  14. Linux系统常见内核问题修复(转发)
  15. Python3之turtle模块的使用
  16. Win8.1开机自启动程序
  17. bzoj 2427 软件安装 - Tarjan - 树形动态规划
  18. Flowable BPMN 简单使用
  19. python基础之模块之序列化
  20. java基础之多线程二:多线程实现方式

热门文章

  1. Airplace平台
  2. day08(File类 ,字节流)
  3. Watermelon -- codeforces
  4. 四则运算 Python实现(杨浩政,张兆敏)
  5. [翻译] Virtual method interception 虚方法拦截
  6. 使用ABP框架踩过的坑系列5
  7. 初识WebAPI
  8. 一个简单的QQ隐藏图生成算法
  9. koa和egg项目webpack热更新实现
  10. C#通过rdp账密直接打开远程桌面