[LeetCode] 061. Rotate List
-
date_range April 09, 2019 - Tuesday info
Problem (Medium)
Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
- Input: 1->2->3->4->5->NULL, k = 2
- Output: 4->5->1->2->3->NULL
- Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
- Input: 0->1->2->NULL, k = 4
- Output: 2->0->1->NULL
- Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right: 0->1->2->NULL rotate 4 steps to the right: 2->0->1->NULL
Approach 1: (My Solution - Beat 65.38%)
Idea
- Connect the last item in the linked list to the head;
- Walk through the cycle linked list to the
n-k-1
-th item; - Save
n-k
-th item asres
; - Set the
n-k-1
-th item’snext
to `None; - Return
res
.
Solution
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution1:
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if not head:
return
tmp = head
count = 0
while tmp:
count += 1
if not tmp.next:
tmp.next = head
break
else:
tmp = tmp.next
tmp = head
for _ in range(count - k % count - 1):
tmp = tmp.next
res = tmp.next
tmp.next = None
return res
Complexity
- Time: $O(n)$
- Space: $O(1)$
KF