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.
题意:
给一个list,向右轮换k个位置,k非负
思路:
观察到变化的主要是head,先得到list的长度,再得到新head的位置,做出变化
Python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if head is None:
return None
if k==0:
return head
dummy=ListNode(0)
dummy.next=head
p=dummy
length=0
while p.next: # 得到list的长度
length+=1
p=p.next
p.next=dummy.next
step=length-(k%length) # 得到新head的位置
while step>0: # 到新head的位置
step-=1
p=p.next
dummy.next=p.next # 变化
p.next=None
return dummy.next