LeetCode Rotate List
2016-03-16 08:33
441 查看
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* rotateRight(ListNode* head, int k) { int level = -1; int size = 0; ListNode *ptr = head; while(ptr != nullptr) //一定要找到size,并取余,不然这个算法就是错的 { size++; ptr = ptr->next; } if(size == 0) return nullptr; cout << k%size<<endl; ListNode *newhead = findNewHead(head, k%size, level); ptr = head; while( ptr != nullptr) { if(ptr->next == newhead) ptr->next = nullptr; //要将新的头节点的前前节点设置为nullptr ptr = ptr->next; } ptr = newhead; while(ptr != nullptr && ptr->next != nullptr && ptr != head) // Error: 要找到最后一个,再连接到head ptr = ptr->next; if(ptr!= nullptr && ptr->next == nullptr && ptr != head) ptr->next = head;//Error:要判断ptr是不是head,不然容易产生环状 if(newhead == nullptr) newhead = head; //newhead返回nullptr时如何处理也非常关键 return newhead; } ListNode* findNewHead(ListNode * node, int k, int& level) { ListNode* newhead = nullptr; if(node == nullptr) {level = 0; return nullptr;} if(level < 0) newhead = findNewHead(node->next, k, level); if(level == k) { return newhead; //哪条路径返回什么值也一定要搞清楚 } if(level >= 0) level++; return node; //哪条路径返回什么值也一定要搞清楚 } };
相关文章推荐
- HDOJ 1418 抱歉 (规律)
- .NET Framework 各版本介绍和下载链接汇总
- Windows_CMD_临时环境变量
- 开源 java CMS - FreeCMS2.4 操作日志
- UESTC 758 P酱的冒险旅途
- 传统的程序员将会被淘汰
- 如何得到Ubuntu UI Toolkit的版本
- PHP安全有帮助的一些函数
- 年龄巧合分离数,报时助手字符串数组,大数加法
- lintcode-medium-Combinations
- 再谈百度:KPI、无人机,以及一个必须给父母看的案例
- 欢迎使用CSDN-markdown编辑器
- [HNOI2012]与非 解题报告
- (四)ExtJs自定义弹出框(show)
- thread
- POJ 3187 Backward Digit Sums (全排列)
- ORA-39143: 转储文件可能是原始的导出转储文件
- [3.16]竞赛入门经典,习题2-6
- IMP-00032:SQL 语句超过缓冲区长度的问题解决
- Docker 入门到实践笔记2