解题思路-leetcode第六十一题:旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NUL
解题思路:本题采用先将链表首尾相连再从指定位置断开的方法解题。首先排除特殊情况,然后获取链表长度,然后将链表尾与链表头相连,然后计算给出的k在链表中的对应位置k0,然后通过遍历,将指针p指到该位置,然后通过将p.next指向None断开链表,最后返回链表。代码如下:
class Solution:
def rotateRight(self, head: ListNode, k: int) -> ListNode:
if not head:
return head
l = 1
p = head
while p.next:
p = p.next
l += 1
p.next = head
k0 = l - k % l
while k0:
p = head
head = head.next
k0 -= 1
p.next = None
return head
提交后,通过。