首页 > 其他 > 详细

[LeetCode] 61. Rotate List 解题思路

时间:2015-12-23 01:57:19      阅读:156      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!