[LeetCode] 61. Rotate List 解题思路

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     }

 

转载于:https://www.cnblogs.com/TonyYPZhang/p/5068620.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值