首先需要发现,k与链表长度N的关系。
其次,重复执行“把最后一个节点插入头节点后”
生成带头节点使得操作变得简单
# 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 k == 0 or head is None or head.next is None:
return head
H = ListNode()
H.next = head
p = H
length = 0
while p.next:
length += 1
p = p.next
k = k % length
for i in range(k):
p = H.next
q = H
while p.next:
q = p
p = p.next
p.next = H.next
H.next = p
q.next = None
return H.next
网友评论