首页 > 其他 > 详细

Leetcode解题-链表(2.2.2)ReverseLinkedList

时间:2015-03-28 11:32:57      阅读:209      评论:0      收藏:0      [点我收藏+]

题目:2.2.2 Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:

Given 1->2->3->4->5->nullptr, m = 2 and n = 4,

return 1->4->3->2->5->nullptr.

Note: Given m, n satisfy the following condition: 1 <= m <= n <= length of list.

链表旋转是个经典问题,可以锻炼我们操作链表的能力,值得好好学习一下。

我的方法:对headtail特殊化处理

m<=i<=n时,通过记录前继结点prev,简单的调转next指针方向,并记录m结点pm。最后迭代到n+1时,再处理firstpm->next)和lastp)结点的指向问题。

技术分享

 

更好的方法:一般化处理

将整个过程一般化处理的方法为:不断地将当前结点cur插入到head的后面。(见下面图示)第一次将3插入到1后面,第二次将4插入到1后面,即1=>2=>3=>4旋转为1=>3=>2=>4。如果能解决的话,那么继续1=>3=>2=>4=>5就能旋转为1=>4=>3=>2=>5,从而解决问题。总结:首先举最简单的例子解决,然后看解决办法能否继续推广到更复杂一些的例子,避免复杂的特殊化处理

技术分享

代码实现

理解了整体设计,自己实现或读代码就很简单了。开始真正处理前要记住headm的前一个结点)和pm(索引为m的结点),就可以开始旋转了。

技术分享

 

Leetcode解题-链表(2.2.2)ReverseLinkedList

原文:http://blog.csdn.net/dc_726/article/details/44699713

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!