LeetCode61 Rotate List
2016-09-19 22:20
337 查看
题目:
Given a list, rotate the list to the right by k places, where k is non-negative. (Medium)
For example:
Given
return
分析:
利用双指针,一个指针先走k步,然后两个指针同时走,runner走到链表尾时chaser在要翻转之前位置,然后折腾一下指针指向即可。
注意:如果k 大于指针长度时,题目表述不清,应该是按照循环回来处理。所以前面需要求一下链表长度,并把k % size。
代码:
Given a list, rotate the list to the right by k places, where k is non-negative. (Medium)
For example:
Given
1->2->3->4->5->NULLand k =
2,
return
4->5->1->2->3->NULL.
分析:
利用双指针,一个指针先走k步,然后两个指针同时走,runner走到链表尾时chaser在要翻转之前位置,然后折腾一下指针指向即可。
注意:如果k 大于指针长度时,题目表述不清,应该是按照循环回来处理。所以前面需要求一下链表长度,并把k % size。
代码:
/** * 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 == nullptr) { return nullptr; } int size = 0; ListNode* temp = head; while (temp != nullptr) { temp = temp -> next; size++; } k = k % size; ListNode* runner = head; ListNode* chaser = head; for (int i = 0; i < k; ++i) { runner = runner -> next; } while (runner -> next != nullptr) { runner = runner -> next; chaser = chaser -> next; } runner -> next = head; ListNode* result = chaser -> next; chaser -> next = nullptr; return result; } };
相关文章推荐
- Leetcode 61. Rotate List
- LeetCode 61. Rotate List
- LeetCode 61: Rotate List
- 【leetcode】61. Rotate List
- leetcode_61_Rotate List
- (Java)LeetCode-61. Rotate List
- leetcode 61. Rotate List
- leetcode - 61.Rotate List
- leetcode61: Rotate List
- [LeetCode61]Rotate List
- [leetcode]61. Rotate List
- LeetCode 61 Rotate List
- Leetcode 61. Rotate List
- [Leetcode]@python 61. Rotate List
- LeetCode 61. Rotate List
- [LeetCode] 61. Rotate List
- LeetCode 61. Rotate List
- LeetCode 61. Rotate List
- LeetCode----- 61. Rotate List
- leetcode 61.Rotate List