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

[LeetCode] 61. Rotate List 解题思路

时间:2015-12-23 01:57:20      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

问题:给定列表 和一个整数 k ,旋转列表最后 k 个元素至列表最前面。

关键是找到最后元素 lastOne 和 旋转后列表新的最后元素 newLastOne

 1     ListNode* rotateRight(ListNode* head, int k) {
 2     
 3         if (head == NULL) {
 4             return NULL;
 5         }
 6         
 7         int n = 1;
 8         ListNode* lastOne = head;
 9         while (lastOne->next != NULL) {
10             n++;
11             lastOne = lastOne->next;
12         }
13         
14         if (n == k) {
15             return head;
16         }
17         
18       int firstNum = n - (k % n);
19                 
20         ListNode* newLastOne;
21         newLastOne = head;
22         for (int i = 1; i < firstNum; i++) {
23             newLastOne = newLastOne->next;
24         }
25                 
26         lastOne->next = head;
27         head = newLastOne->next;
28         newLastOne->next = NULL;
29         
30         return head;
31     }

 

[LeetCode] 61. Rotate List 解题思路

标签:

原文地址:http://www.cnblogs.com/TonyYPZhang/p/5068620.html

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