61. Rotate List
2016-06-11 18:58
281 查看
题目:
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
题意:
给定一个链表,将该链表从右边第k个位置处翻转,这里的k为非负值。
思路:
循环轮询链表,找出链表总长度,将链表的头尾相接,在翻转的位置断开链表即可。
代码:12ms
/**
* 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) return head;
int len = 1;
ListNode *newH = head, *tail = head;
while(tail->next){
tail = tail->next;
len++;
}
tail->next = head;
if(k %= len){
for(auto i=0; i<len-k; i++){
tail = tail->next;
}
}
newH = tail->next;
tail->next = NULL;
return newH;
}
};
代码:12ms
/**
* 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(!k || !head || !head->next) return head;
ListNode *fast = head;
int lens = 1;
while(k--){
if(fast->next){
fast = fast->next;
lens++;
}else{
fast = head;
k %= lens;
}
}
if(fast==head) return head;
ListNode *slow = head;
while(fast->next){
fast = fast->next;
slow = slow->next;
}
ListNode *newHead = slow->next;
slow->next = NULL;
fast->next = head;
return newHead;
}
};
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->NULLand k =
2,
return
4->5->1->2->3->NULL.
题意:
给定一个链表,将该链表从右边第k个位置处翻转,这里的k为非负值。
思路:
循环轮询链表,找出链表总长度,将链表的头尾相接,在翻转的位置断开链表即可。
代码:12ms
/**
* 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) return head;
int len = 1;
ListNode *newH = head, *tail = head;
while(tail->next){
tail = tail->next;
len++;
}
tail->next = head;
if(k %= len){
for(auto i=0; i<len-k; i++){
tail = tail->next;
}
}
newH = tail->next;
tail->next = NULL;
return newH;
}
};
代码:12ms
/**
* 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(!k || !head || !head->next) return head;
ListNode *fast = head;
int lens = 1;
while(k--){
if(fast->next){
fast = fast->next;
lens++;
}else{
fast = head;
k %= lens;
}
}
if(fast==head) return head;
ListNode *slow = head;
while(fast->next){
fast = fast->next;
slow = slow->next;
}
ListNode *newHead = slow->next;
slow->next = NULL;
fast->next = head;
return newHead;
}
};
相关文章推荐
- PDO预处理防sql注入
- 【51CTO学院三周年】学业有成啦
- Windows下体验Linux Ubuntu系统&&安装JDK,Android SDK,Android Studio
- 从零开始山寨Caffe·壹:仰望星空与脚踏实地
- Asp.net Session 与Cookie的应用
- java调用Oracle分页存储过程
- 创建Oracle数据库
- 互联网协议入门
- android system权限获取
- spring 自动装配
- 从零开始山寨Caffe·零:必先利其器
- C# ACCESS数据库操作类
- 永不过时的自定义AlertView
- 使用PHPExcel导出文件
- 文章标题
- 省市县联动 php处理 生成js文件 并且jquery 调用
- JavaAPI之Type接口
- 【Linux】简单实现进度条
- 【数据结构】二叉搜索树
- 【数据结构】AVL树