*
* 1->2->3
* a-->b--c-->d d-->c--b-->a
*/
这个题的解题思路应该是设立一个prevNode, 一个curNode.
while(cur != null)
{
...
}
让curNode一个一个的移动,每次移动调整一下prevNode指向上一次的curNode,这样下一层curNode就可以指向prev。 唯一要注意的两个问题就是While loop的condition, 什么时候应该停止.
可以通过尝试的办法,假设cur == null的话会发生什么情况? cur没法进入loop,也没办法设置prev。那么return回去的只会是一个null的cur。所以cur是不能等于Null的。
还有一个问题,因为循环的时候每一轮cur = nextNode. 万一nextNode是一个null,cur 等于了nextNode 因此没办法pass while的condition。因此我们在while内部要做一个if的判断 nextNode的值。
这个题还是比较考验题感的,做题的时候一下子推理出这么多东西还是有一点点难度。
对于这种题,可以想象list为电影院的一排座位。reverse list就好像让本身从左往右的队伍变成从右往左。 队伍的头是队长。 cur Node可以当做队伍的队长。
在process的过程中,队长的职位从最左端一直往右移动。 condition的判断很明显,队长必须是有人当,所以cur != null. 在cur 等于最后一个非NUll值的时候就该return了。
怎么知道是最后一个非Null的人?当NextNode为空的时候,队长就是电影院一排最后一个了。
这道题是很有战略意义的。 可以当做一个拼图,很多的list题会需要reverse 一个list的某个部分。比如reverse second half linkedlist. 如果这个拼图会熟练,做升级版的题的时候想的东西就不用太多。