首页 > 代码库 > Leetcode#61 Rotate List
Leetcode#61 Rotate List
原题地址
我一直不太理解为什么叫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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。