LeetCode reorder-list
Posted googlemeoften
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode reorder-list相关的知识,希望对你有一定的参考价值。
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 + "";
}
}
以上是关于LeetCode reorder-list的主要内容,如果未能解决你的问题,请参考以下文章