61. Rotate List
Posted kykai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了61. Rotate List相关的知识,希望对你有一定的参考价值。
题目描述
Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4
Output: 2->0->1->NULL
参考答案
1 class Solution 2 public: 3 ListNode* rotateRight(ListNode* head, int k) 4 if(!head) return 0; 5 ListNode * cur; 6 ListNode * nHead; 7 cur = nHead = head; 8 int len = 1; 9 10 while(cur->next) 11 cur = cur->next; 12 len++; 13 14 cur ->next = head; 15 16 if(k%=len) 17 for(int i = 0 ; i<len-k;i++) 18 cur = cur->next; 19 20 21 nHead = cur->next; 22 cur->next = NULL; 23 return nHead; 24 25 26 ;
答案分析
分成三部分:
1. 链接首尾
2. 移动
3. 拆开
第一部分,连接首位。建立cur,进行loop,得到cur->next,然后将head续给next,同时并记录list的个数。
第二部分,移动。因为是从尾巴向前移动,因此,在算完 k%len 后,还需要 k = len - k % len。
第三部分,断开。由于 cur 是 head 的前,因此需要head = cur->next,然后就不需要cur->next了,断开就好。
以上是关于61. Rotate List的主要内容,如果未能解决你的问题,请参考以下文章