题目

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 andk=2,

return 4−>5−>1−>2−>3−>NULL.

分析

给定一个链表,以及一个整数k,返回链表右旋k个元素后的结果。

要使得链表右旋k个元素,也就是说明链表后(k)个元素将成为新链表的前半部分,原链表的前(len−k)个元素将成为新链表的后半部分;

此时原链表的head前恰好有k 个元素,即完成了右旋k个位置。

要注意的是,当k=0||n∗len时,原链表将不变,只有当k的结果为 1 len−1时,链表才会发生变化。

AC代码

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (head == NULL)
return head; ListNode *p = head; //求链表的长度
int len = 0;
while (p)
{
len++;
p = p->next;
} k %= len; //k<=0时,原链表不旋转
if (k <= 0)
return head; int index = 1;
//寻找右旋k位置后,链表的首结点
p = head;
while (index < (len - k) && p->next != NULL)
{
index++;
p = p->next;
} ListNode *ret = p->next, *q = p; //原链表寻找尾结点,将其链接到head
while (p->next)
p = p->next;
p->next = head; //前部分尾结点设为NULL
q->next = NULL;
return ret; }
};

GitHub测试程序源码

最新文章

  1. 程序猿是如何解决SQLServer占CPU100%的
  2. JS中数组Array的用法{转载}
  3. Hibernate3.3.2 手动配置annotation环境
  4. phoenix创建二级索引
  5. String的内存分配
  6. RAID、软RAID和硬RAID
  7. mac下编译optool方法
  8. vc终端输入结束符
  9. [转] GCC 中的编译器堆栈保护技术
  10. 【CSS学习】字符实体
  11. android教学大纲
  12. android 优化
  13. 音频特征提取——librosa工具包使用
  14. linux根目录扩容
  15. java实现http的post和get
  16. IDEA指定.class文件输出位置
  17. VS 2013Ultimate 开发过程中遇到的问题——listbox的隐藏问题,combobox.textchanged的中文问题
  18. [Swift]LeetCode296. 最佳开会地点 $ Best Meeting Point
  19. Win7 64位使用IDA Pro 6.8调试64位exe程序
  20. Mysql优化系列(1)--Innodb重要参数优化

热门文章

  1. linux 查看进程和端口
  2. Qt之程序发布以及打包成exe安装包
  3. [USACO 2011 Nov Gold] Above the Median【逆序对】
  4. 贪心 UVALive 6832 Bit String Reordering
  5. github下载下来的C#控制台小游戏[含源码]
  6. ios 创建和绘画pdf文件 -转
  7. JavaScript的执行
  8. HBase简介(很好的梳理资料) 转
  9. Ref 和 Out 区别(演练代码)
  10. visual assist x 注释配置