题解 | #调整牛群顺序#

调整牛群顺序

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务