leetcode 刷题之路 13 Rotate List
2014-07-26 18:33
190 查看
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
链表的右旋操作,对于任意k,应该先做一个模n的操作,这样对于大于等于链表长度的k,相当于省略了一个或多个右旋n个节点的操作(右旋n个节点结果等于原链表)。通过取模操作后获得一个小于n的k,此时要做的就是获得一个链表的第倒数k的节点,具体的做法就是使用两个指针pFront,pBack,先让pFront前进k个节点,然后再使pFront和pBack同时前进,当pFront为NULL时,pBack就是第倒数k个节点。这道题为了便于后续操作,使pFront停在了倒数第一个节点,从而pBack停在了第倒数k+1个节点上,这样就很容易把后k个节点取出移动到整个链表的前面,更具体的步骤可以参考代码。
my accepted answer:
For example:
Given
1->2->3->4->5->NULLand k =
2,
return
4->5->1->2->3->NULL.
链表的右旋操作,对于任意k,应该先做一个模n的操作,这样对于大于等于链表长度的k,相当于省略了一个或多个右旋n个节点的操作(右旋n个节点结果等于原链表)。通过取模操作后获得一个小于n的k,此时要做的就是获得一个链表的第倒数k的节点,具体的做法就是使用两个指针pFront,pBack,先让pFront前进k个节点,然后再使pFront和pBack同时前进,当pFront为NULL时,pBack就是第倒数k个节点。这道题为了便于后续操作,使pFront停在了倒数第一个节点,从而pBack停在了第倒数k+1个节点上,这样就很容易把后k个节点取出移动到整个链表的前面,更具体的步骤可以参考代码。
my accepted answer:
/** * 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) return NULL; ListNode* pBack, *pFront; int n = 0; for (pFront = head; pFront != NULL; pFront = pFront->next) n++; if (n == 1) return head; k = k%n; pBack = head; pFront = head; for (int i = 0; i < k; i++) pFront = pFront->next; while (pFront->next != NULL) { pFront = pFront->next; pBack = pBack->next; } pFront->next = head; ListNode* pRet = pBack->next; pBack->next = NULL; return pRet; } };
相关文章推荐
- LeetCode : Rotate List
- [LeetCode] Rotate List
- Leetcode rotate list
- [LeetCode] Rotate List
- LeetCode题解:Rotate List
- [LeetCode] Rotate List
- Leetcode: Rotate List
- 【leetcode】Rotate List
- leetcode之Rotate List
- LeetCode Online Judge 题目C# 练习 - Rotate List
- leetcode 70: Rotate List
- [Leetcode 57] 61 Rotate List
- leetcode Rotate List
- Leetcode rotate list
- [leetcode] Rotate List
- [LeetCode] Rotate List 解题报告
- Leetcode: Rotate List
- [leetcode]Rotate List
- LeetCode Rotate List 分析解答
- 【Leetcode】Rotate List