【python】Leetcode每日一题-旋转链表


【python】Leetcode每日一题-旋转链表

【题目描述】

给你一个链表的头节点 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

【分析】

  • 思路

    由于 $ 0 \le k \le 2 * 10^9$ ,k较大,因此需要先求出链表总长度,k = len - k % len 求出偏移值,连接链表头部和尾部,切断偏移值处即可。

  • AC代码

    # 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: ListNode, k: int) -> ListNode:
            if head == None:
                return
            len = 1
            p = head
            while p:
                if p.next == None:
                    p.next = head
                    break
                p = p.next
                len += 1
            k = len - k % len
            p = head
            while k != 1:
                p = p.next
                k -= 1
            q = p.next
            p.next = None
            return q