题目描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
解题思路
主要是想清楚如何实现旋转操作。观察可以发现,第i个位置,旋转k之后的新位置是(i+k)%length(listlink),即位置加上k之后再对链表的长度取余,余数的位置即是旋转之后的新位置。
所以,需要补充求链表长度的方法。这个也不复杂。
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def __len__(self,head):
num = 1
while head.next:
num += 1
head = head.next
return num
def __value__(self,head):
value = []
while head:
value.append(head.val)
head = head.next
return value
def __gen__(self,value):
head = ListNode(value[0],None)
t = head
for i in range(1,len(value)):
node = ListNode(value[i],None)
t.next = node
t = t.next
return head
def rotateRight(self, head: ListNode, k: int) -> ListNode:
#length = self.__len__(head)
## 空列表直接返回
if not head:
return
value = self.__value__(head)
new_value = [0]*len(value)
for index,each in enumerate(value):
# 通过取余找到旋转之后的新位置
new_value[(index+k)%len(value)] = each
return self.__gen__(new_value)