题解 | #调整牛群顺序#
调整牛群顺序
https://www.nowcoder.com/practice/a1f432134c31416b8b2957e66961b7d4
from re import S # class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param head ListNode类 # @param n int整型 # @return ListNode类 # class Solution: def isLast(self, node: ListNode) -> bool: return True if node.next is None else False def moveNthToEnd(self , head: ListNode, n: int) -> ListNode: if head is None: return head # 仅一个节点或移动最后一个节点 if head.next is None or n <= 1: return head # 伪节点 dummy = ListNode(0) dummy.next = head slow = quick = dummy for _ in range(n): # n大于链表的长度 if not quick: return head quick = quick.next # quick如果是最后一个节点,停下来 # slow节点指向的是待移动节点的前一个节点,到时候直接修改next,不用再遍历 while quick.next: quick = quick.next slow = slow.next # 待移动节点 move_node = slow.next if slow == dummy: # 移动第1个节点 quick.next = move_node # 设置尾节点指向move节点 head = move_node.next # 重新设置head节点 move_node.next=None # 设置move_node为尾节点 else: slow.next = move_node.next quick.next = move_node move_node.next=None return head