一、题目描述
给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
示例 1
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2
输入:head = [0,1,2], k = 4
输出:[2,0,1]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 *10^9
`
二、代码
代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
result = []
l1 = head
list1 = []
list_left = []
list_right = []
# 将链表保存至list中
while (l1):
list1.append(l1.val)
l1 = l1.next
length = len(list1)
if length == 0 or length == 1:
return head
else:
list_left = list1[0:length-k%length].copy()
list_right = list1[length-k%length:length].copy()
result.extend(list_right)
result.extend(list_left)
print(result)
# 将result转换为单链表
head = ListNode(result[0], None)
tail = head
for i in range(length - 1):
node = ListNode(result[i + 1], None)
tail.next = node
tail = node
return head
三、解题思路
本题解决思路是将单链表转换为列表后进行分割操作,“旋转”可以理解为列表向右移动的操作,我们只需要找到移动的位数然后将其分割为左右两个列表,再颠倒一下左右列表重新组合,就能得到“旋转”后的列表,最后将列表转化为链表返回即可。