码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode]Reorder List

时间:2014-12-29 21:34:09      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:java   leetcode   链表   

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-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}.

基本思想:从链表中间这段,对后一段的链表作reverse,然后间隔插入到前一段的链表中。

/**
 * 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) return;
		ListNode ln = head;
		int len = 0;
		while(ln!=null){
			len++;
			ln = ln.next;
		}
		int mid = (len-1)/2;
		ListNode midNode = head;
		while(mid!=0){
			midNode = midNode.next;
			mid--;
		}
		ListNode insert = reverse(midNode.next);
		midNode.next = null;
		ListNode bInsert = head;
		while(insert!=null){
			ListNode inext = insert.next;
			ListNode bnext = bInsert.next;
			bInsert.next = insert;
			insert.next = bnext;
			bInsert = bnext;
			insert = inext;
		}
	}
	
	private ListNode reverse(ListNode head){
		ListNode pre = null;
		ListNode cur = head;
		while(cur!=null){
			ListNode next = cur.next;
			cur.next = pre;
			pre = cur;
			cur = next;
		}
		return pre;
	}
}


[Leetcode]Reorder List

标签:java   leetcode   链表   

原文地址:http://blog.csdn.net/guorudi/article/details/42242887

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!