List题:Reverse list

*

* 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. 如果这个拼图会熟练,做升级版的题的时候想的东西就不用太多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容