classListNode(): def__init__(self, val): self.val = val self.next = None
def__str__(self): returnstr(self.val)
defcreateList(value_list: list) -> ListNode: """ Create Linked List based on list :param value_list: list :return: NodeList """ _len = len(value_list) if _len == 0: returnNone if _len == 1: return ListNode(value_list[0]) else: root = ListNode(value_list[0]) tmp = root for i inrange(1, _len): tmp.next = ListNode(value_list[i]) # 声明当前节点,再把当前节点与前面节点联系在一起。 tmp = tmp.next# 更新tmp为下一个节点 return root # 返回根节点
defprintList(head: ListNode): """ Print single node one by one in linked list :param head: ListNode :return: None """ p = head while p != None: # print() print(p) # 由于有ListNode实现了__str__函数 就不用调用p.val来获取节点值了 p = p.next
deflistLength(head: ListNode) -> int: """ Get the length of linked list :param head: ListNode :return: int """ count = 0 p = head while p != None: count += 1 p = p.next return count
classSolution: defrotateRight(self, head: ListNode, k: int) -> ListNode: length = listLength(head) if length == 0: returnNone k = k % length if k == 0or length == 1: # k=0意味着不需要调整 return head # 哑结点 dummy = ListNode(None) dummy.next = head slow_pointer = head fast_pointer = head i = 0 while i < k: fast_pointer = fast_pointer.next i += 1 while fast_pointer.next != None: fast_pointer = fast_pointer.next slow_pointer = slow_pointer.next
dummy.next = slow_pointer.next slow_pointer.next = None fast_pointer.next = head