第七天leetcode刷题
61.reverse nodes in k group
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
思路:
- k可能比list的size大,需要做一个取余准备
- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head
- 利用之前的到末端的kth node
具体代码实现如下:
class Solution:
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if not head or k == 0:
return head
size = 0
cur = tail = head
while cur:
size += 1
tail = cur
cur = cur.next
k = k % size
if k == 0:
return head
tmp = self.findLastKth(head, k)
last_kth = tmp.next
tmp.next = None
tail.next = head
return last_kth
def findLastKth(self, node, k):
fast = slow = node
for i in range(k+1):
fast = fast.next
while fast:
slow = slow.next
fast = fast.next
return slow