讨论/《链表》 - 旋转链表/
《链表》 - 旋转链表

Python3

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        """
        思路:1. 将链表链成环
             2. 从第n-(k%n)处断开
             特殊处理: k=0 or 链表为空 or n-(k%n) == n 时,返回原链表
        方法:
        """
        # 特殊处理
        if k == 0 or not head or not head.next:
            return head
        # 计算链表的长度n
        n = 1
        curr = head
        while curr.next:
            curr = curr.next
            n += 1
        # 计算切断点
        cut = n - k % n
        # 如果k正好是n的倍数,则原链表移动后不变
        if cut == n:
            return head
        # 将链表变成环
        curr.next = head
        # 在切点点断开
        while cut:
            curr = curr.next
            cut -= 1
        ret = curr.next
        curr.next = None
        return ret

展开全部 8 讨论