List类题型: Reorder List

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}:

这道题的几个难点, 1. In-place 一开始的一点想法是去reverse linkedlist 然后用两个list 交叉着组合, 但是in place直接打消了所有念头。 

这个时候 如果是真正面试 没有任何hint的话 一般就会陷入无比绝望中。

不过做题的时候永远就是得思考自己的goal是什么,怎么达成 T^T.    

Goal: 我们需要前半部分的node指向后半部分的node somehow. 怎么做到?暂时不知道。 这时候需要想怎么样可以让后半部分的node一个一个pop out 就像前半部分的list一样。 这时候就得靠intuition 想到stack的原理了, 也就是first in last out.

That being said, 我们可以先把整个list的所有node 灌入stack里面。从前往后process,前头每pop出一个node,后面就pop出一个node。 

cur = head;

while (cur!=null)

{

...........

}

你可能感兴趣的:(List类题型: Reorder List)