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