您的位置:首页 > 其它

LeetCode reorder-list

2016-08-31 14:54 483 查看
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}.

给定一个单链表L:L0→L1→…→ln1→Ln,

重新排序到:L0→Ln→L1→ln1→L2→Ln 2→…

你必须做这个就地在不改变节点的值。

例如,

考虑到{ 1,2,3,4 },重新排序到{ 1 4 2 3 }。

该题要先找到链表的中点,然后将中点后面的链表进行排序,排序结束以后进行 合并

package cn.edu.algorithm.huawei;

import java.util.ArrayList;

public class Solution {
public void reorderList(ListNode head) {
if (head == null || head.next == null || head.next.next == null)
return;
ListNode mid = getListMid(head);

ListNode reverList = reverseList(mid.next);
mid.next = null;
merge(head, reverList);
//print(list);
}

public ListNode getListMid(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while (fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode next = null;

while (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}

public void merge(ListNode node1, ListNode node2) {
ListNode cur1 = node1;
ListNode cur2 = node2;
ListNode temp1;
ListNode temp2;

while (cur1 != null & cur2 != null) {
temp1 = cur1.next;
cur1.next = cur2;
temp2 = cur2.next;
cur2.next = temp1;
cur1 = temp1;
cur2 = temp2;
}
//return node1;
}
public void print(ListNode list) {
while (list != null) {
System.out.print(list + " ");
list = list.next;
}
System.out.println("");
}

public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;

ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
ListNode node6 = new ListNode(6);
// node3.next = node4;
// node4.next = node5;

Solution s = new Solution();
s.reorderList(node1);

}
}

class TreeNode {
int val;
TreeNode left;
TreeNode right;

TreeNode(int x) {
val = x;
}

@Override
public String toString() {
return val + "";
}
}

class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
next = null;
}

@Override
public String toString() {
return val + "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: