61. Rotate List

https://leetcode.com/problems/rotate-list/description/
给一个链表和一个数k,表示从取末尾加到头k次。
思路:直接头插法操作k轮。后来发现k可能特别大,观察发现若链表长度为L,操作L轮即得到原链,因此可以用k%L轮操作即可。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head or not head.next:  #边界条件
            return head
        i = head
        length = 0
        while i:
            i = i.next
            length += 1  #求链长
        k = k % length  #跳过重复周期
        for _ in range(k):
            i, j = head, head.next.next  #j指向i后两位
            while j:
                i = i.next
                j = j.next
            i.next.next = head
            head = i.next
            i.next = j
        return head

猜你喜欢

转载自blog.csdn.net/u012033124/article/details/80732681