LeedCode:Rotate List
2015-07-22 09:07
211 查看
给定一个单链表,从后向前翻转K个节点,K是一个非负整数;
例如:1->2->3->4->5, k = 2;
则返回:4->5->1->2->3
分析:先遍历一遍,得出链表的长度len,注意K可能大于len,因此令k = k % len;将尾节点next指针指向首节点,形成一个环,接着往后跑len - k步,从这里断开,就是所要求的结果了。
代码
/**
* 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 ==nullptr || k ==0) return head;
int len = 1;
ListNode *p = head;
while(p->next){
len ++;
p = p->next;//
}
k = len - k % len;
p->next = head;
for(int step = 0;step < k;step++){
p = p->next;
}
head = p->next;
p->next = nullptr;
return head;
}
};
例如:1->2->3->4->5, k = 2;
则返回:4->5->1->2->3
分析:先遍历一遍,得出链表的长度len,注意K可能大于len,因此令k = k % len;将尾节点next指针指向首节点,形成一个环,接着往后跑len - k步,从这里断开,就是所要求的结果了。
代码
/**
* 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 ==nullptr || k ==0) return head;
int len = 1;
ListNode *p = head;
while(p->next){
len ++;
p = p->next;//
}
k = len - k % len;
p->next = head;
for(int step = 0;step < k;step++){
p = p->next;
}
head = p->next;
p->next = nullptr;
return head;
}
};
相关文章推荐
- LeetCode || Number of 1 Bits
- Mac自定义命令
- 有几数组表单,js怎么获得数组并动态相加输出到文本框
- MySQL导入CSV格式文件
- 会话EJB系列(二)EJB分类
- unity 所有版本下载地址
- Java之克隆机制
- NYOJ 24 素数距离问题
- 【图论】[Tyvj 1153]间谍网络
- 面向对象(一)(封装,继承,多态,继承与组合,初始化块)
- MySQL 查询某个列中相同值的数量统计
- php实现短信发送代码
- freemarker该阵列
- 什么是死锁,试举例说明?
- Android基础入门教程——3.1 基于监听的事件处理机制
- java之反射机制
- hibernate不支持插入操作
- Android基础入门教程——2.3.1 TextView(文本框)详解
- openGL 错误总结
- uva 784 Maze Exploration(简单dfs)