Leetcode -- Rotate List
2015-08-15 09:40
155 查看
题目:
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->NULL and k = 2,
return 4->5->1->2->3->NULL.
分析:
将后面的k个node旋转到链表的开头。若k大于链表的长度,则应该先进行求余,再进行链表旋转。
思路:
1)计算链表的长度,计算在第几个点,旋转链表
2)找到该节点,将该节点的上一个节点的next设置为NULL,将链表最后一个节点的next设置为head。
代码:
leetcode的测试用例,总是存在一个输入为空的情况,记住要额外处理一下。
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->NULL and k = 2,
return 4->5->1->2->3->NULL.
分析:
将后面的k个node旋转到链表的开头。若k大于链表的长度,则应该先进行求余,再进行链表旋转。
思路:
1)计算链表的长度,计算在第几个点,旋转链表
2)找到该节点,将该节点的上一个节点的next设置为NULL,将链表最后一个节点的next设置为head。
代码:
ListNode* rotateRight(ListNode* head, int k) { if(!head) return head; ListNode* l = head; ListNode* last; ListNode* p; int len = 0; int times = 0; while(l) { len ++; last = l; l = l->next; } k = k%len; if (k != 0) { l = head; for(int i = 1; i < (len - k); i++) { l = l->next; } p = l ->next; l->next = NULL; last->next = head; return p; } return head; }
leetcode的测试用例,总是存在一个输入为空的情况,记住要额外处理一下。
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- C语言双向链表的表示与实现实例详解
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析
- php链表用法实例分析
- JavaScript中数据结构与算法(三):链表
- 编码实现从无序链表中移除重复项(C和JAVA实例)