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

Leetcode#61 Rotate List

时间:2015-01-27 20:03:30      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

原题地址

 

我一直不太理解为什么叫rotate,翻译成"旋转"吧,似乎也不像啊。比如:

1->2->3->4->5->NULL

向右旋转2的距离,变成了:

4->5->1->2->3->NULL

后来琢磨半天+跟人讨论,似乎可以这么理解"rotate"

1. 循环shift。这个比较容易理解。

2. 环旋转。意思是把list首尾连接成一个环进行旋转。想象有一桌菜,你坐在桌边,原先list头部的那盘菜现在就在你眼前,你可以伸手去转桌上的转盘。比如:

技术分享

然后,你把桌上的菜向右转了两个单位,变成这样:

技术分享

最后,你沿着顺时针方向依次吃完了整桌菜,你吃菜的顺序是什么?4->5->1->2->3->NULL,哇,正式我们想要的结果。

 

代码:

 1 ListNode *rotateRight(ListNode *head, int k) {
 2   if (!head) return head;
 3         
 4   int n = 1;
 5   ListNode *h = head;
 6         
 7   while (h->next) {
 8     h = h->next;
 9     n++;
10   }
11   h->next = head;
12         
13   n = n - (k % n);
14   while (n--) {
15     head = head->next;
16     h = h->next;
17   }
18   h->next = NULL;
19         
20   return head;
21 }

 

Leetcode#61 Rotate List

标签:

原文地址:http://www.cnblogs.com/boring09/p/4253664.html

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