剑指 Offer II 029. 排序的循环链表

exiaohu 于 2022-06-18 发布

题目链接:剑指 Offer II 029. 排序的循环链表

插入时,就是要把这个数插入到一个位置,让 prev <= i <= succ。如果不存在这样的位置,那就找到一个位置,满足 prev > succ > ii > prev > succ

"""
# Definition for a Node.
class Node:
    def __init__(self, val=None, next=None):
        self.val = val
        self.next = next
"""

class Solution:
    def insert(self, head: 'Node', insertVal: int) -> 'Node':
        n = Node(insertVal, None)
        if head is None:
            n.next = n
            return n

        p1, p2, start = head, head.next, True
        while True:
            if not start and id(p1) == id(head):
                n.next = p2.next
                p2.next = n
                return head
            elif p1.val <= n.val <= p2.val:
                n.next = p1.next
                p1.next = n
                return head
            elif p1.val > p2.val and (n.val >= p1.val or n.val <= p2.val):
                n.next = p1.next
                p1.next = n
                return head

            start = False
            p1, p2 = p2, p2.next