LeetCode *** 61. Rotate List
2016-04-25 10:30
381 查看
题目:
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
分析:
代码:
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.
分析:
代码:
/** * 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<1 || head == NULL)return head; int pos = 0, total; bool sign = false; ListNode *r = new ListNode(0), *slow, *fast = head, *pre = r, *end = NULL; r->next = head; while (fast&&fast->next) { fast = fast->next->next; pos++; } if (fast == NULL)total = pos * 2; else total = pos * 2 + 1; if (k>total) { k = k%total; if (!k)k = total; } slow = fast = head, pos = 0; while (1) { while (fast != end&&fast->next != end) { pre = slow; slow = slow->next; fast = fast->next->next; if (sign) { pos--; } else pos++; } if (fast != end&&!sign) pos++; if (pos == k)break; else if (pos>k) { sign = true; fast = slow; } else { sign = false; fast = head; end = slow; slow = head; pre = r; } } pre->next = NULL; fast = slow; while (slow->next)slow = slow->next; slow->next = r->next; r->next = fast; return r->next; } };
相关文章推荐
- Unity3D MVC结构
- Android 为操作加音效,加声音。提高用户交互,增加粘性,可以选择声音的添加
- C#CreateGraphics方法的三种实现方式
- matlab中size()函数的用法
- 127.0.0.1\SQLEXPRESS连接异常
- 英语词根
- 类似QQ空间中回复列表的样式 "小明 回复 小红"
- C++虚函数运行机制
- leetcode——345—— Reverse Vowels of a String
- 设计模型总结
- java抽象类和接口的多种实现---学习日志
- Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697
- MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
- Android 烦人的坐标原点
- .o.a.so
- 序列化和反序列化
- 预测数值型数据:回归
- BCM5314x PACKET FLOW
- 扩展的ListView实例
- JAVA中的接口和抽象类(转)