/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public void reorderList(ListNode head) {
if(head == null || head.next == null)
return ;
ListNode low = head, fast = head.next; //快慢指针找到中间节点
//找中间节点
while(fast != null &&fast.next != null){
low = low.next;
fast = fast.next.next;
}
ListNode head2 = null;//逆转后的头结点
ListNode cur = low.next,temp;//后半截链表的头结点
low.next = null;
//逆转后半截链表
while(cur!= null){
temp = cur;
cur = cur.next;
temp.next = head2;
head2 = temp;
}
//链表2插入链表1
cur = head;temp=null;
while(head2 != null){
temp = head2;
head2 = head2.next;
temp.next = cur.next;
cur.next = temp;
cur = cur.next.next;
}
}
}
题目描述
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public void reorderList(ListNode head) {
if(head == null || head.next == null)
return ;
ListNode low = head, fast = head.next; //快慢指针找到中间节点
//找中间节点
while(fast != null &&fast.next != null){
low = low.next;
fast = fast.next.next;
}
ListNode head2 = null;//逆转后的头结点
ListNode cur = low.next,temp;//后半截链表的头结点
low.next = null;
//逆转后半截链表
while(cur!= null){
temp = cur;
cur = cur.next;
temp.next = head2;
head2 = temp;
}
//链表2插入链表1
cur = head;temp=null;
while(head2 != null){
temp = head2;
head2 = head2.next;
temp.next = cur.next;
cur.next = temp;
cur = cur.next.next;
}
}
}
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→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}.