您的位置:首页 > 其它

[LeetCode]143. Reorder List

2016-12-28 15:01 302 查看
https://leetcode.com/problems/reorder-list/

三步:1、找到中点;2、反转后半部分;3、将后半部分依次插入到前半部分

public class Solution {
public void reorderList(ListNode head) {
ListNode pre = new ListNode(0);
pre.next = head;
ListNode fast = pre;
ListNode slow = pre;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
ListNode h2 = reverse(slow.next);
slow.next = null;
merge(head, h2);
}
private ListNode merge(ListNode h1, ListNode h2) {
ListNode pre = new ListNode(0);
ListNode runner = pre;
while (h2 != null ) {
ListNode t1 = h1.next;
ListNode t2 = h2.next;
runner.next = h1;
h1.next = h2;
h1 = t1;
runner = h2;
h2 = t2;
}
runner.next = h1;
return pre.next;
}
private ListNode reverse(ListNode head) {
ListNode pre = null;
while (head != null) {
ListNode next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: