笔试题74. LeetCode OJ (61)
来源:互联网 发布:程序员猝死的原因 编辑:程序博客网 时间:2024/04/29 03:44
Rotate List
这个题的意思旋转链表,更具体点的意思右移链表,移出去的节点放到头部前面,结合着题目给出的例子还是很好理解的。
这个题的主要思路是:摘取从末尾到头的k个节点,然后将他们放到头部。
需要注意的是,上面说的k并不一定等于传入的k的值,因为这个k很可能比链表的长度还大。所以我主要思路是:遍历一遍链表,找到链表的长度n,然后k%=n(这时候k<n,我们更喜欢的是此时k=0),这样就可以找出实际需要移动的节点的个数,然后将链表的最后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 == NULL || head->next == NULL || k == 0){ //0个元素,1个元素,或者k=0return head;}ListNode* newHead = NULL;int lenOfList = 1;ListNode * tmp = head;while (tmp->next){//这样的写法最终能使tmp指向最后一个节点,而不是NULL++lenOfList;tmp = tmp->next;}//之所以让tmp指向最后一个节点,因为最后的时候tmp需要连接头节点。k %= lenOfList;if(k == 0){ // 我也很喜欢这种情况,^_^ return head;}ListNode* cur = head;for (int i = 0; i < lenOfList - k - 1; ++i){ //为什么移动 lenOfList-k-1 次,不理解的需要画个图看看,因为cur初始化值为headcur = cur->next;}//节点的连接newHead = cur->next;cur->next = NULL;tmp->next = head;return newHead; }};最终的结果:
0 0
- 笔试题74. LeetCode OJ (61)
- 笔试题14. LeetCode OJ (1)
- 笔试题15. LeetCode OJ (2)
- 笔试题16. LeetCode OJ (3)
- 笔试题17. LeetCode OJ (4)
- 笔试题18. LeetCode OJ (7)
- 笔试题19. LeetCode OJ (5)
- 笔试题20. LeetCode OJ (6)
- 笔试题21 . LeetCode OJ (8)
- 笔试题22. LeetCode OJ (9)
- 笔试题23. LeetCode OJ (10)
- 笔试题24. LeetCode OJ (11)
- 笔试题25. LeetCode OJ (12)
- 笔试题26. LeetCode OJ (13)
- 笔试题27. LeetCode OJ (14)
- 笔试题28. LeetCode OJ (15)
- 笔试题29. LeetCode OJ (16)
- 笔试题30. LeetCode OJ (17)
- 设计模式读书笔记(一) Abstract Factory(抽象工厂)模式
- 解决电脑卡住不能显示桌面怎么办?
- 【年度开源、工具合集】牛津计划,DMTK,Graph Engine…提高你的工作效率!
- cocos2dx 历史版本下载问题
- MyEclipse 7.0 用java代码生成序列号
- 笔试题74. LeetCode OJ (61)
- 磁盘排序
- 【年度学术大会合集】SIGGRAPH,KDD,AAAI,NIPS…这些你想参加的会议
- 【牛腩】总览
- <PopupWindow>的简单功能和用法
- [SCU 4525] meixiuxiu学图论 (二分答案 | 最小生成树)
- 笔记本安装linux系统后屏幕亮度无法调节
- win7 64b下vmware虚拟机ubuntu14.04磁盘扩容
- Laravel系列之新建laravel项目(二)