Esempio n. 1
0
    dummy = Node()  # X->2   X->2->7  X->1->2->7 ...
    while curr is not None:
        sorted_pre = dummy  # 每次指向已经排好序的头部
        while sorted_pre.next is not None and sorted_pre.next.val < curr.val:
            # 找到当前这个节点要插入的前一个节点
            sorted_pre = sorted_pre.next
        # 画图比较好理解
        tmp = curr.next  # 记录当前剩下的节点
        curr.next = sorted_pre.next  # curr节点的下一个节点;连在pre的下一个
        sorted_pre.next = curr  # pre的下一个节点为curr节点
        curr = tmp
    return dummy.next


ll = LinkedList()
ll.add_first(2)
ll.add_first(3)
ll.add_first(1)
ll.add_first(5)

ll.print_list()
a = ll.head.next
b = insertSortLinkedList(a)
ll.head.next = b
ll.print_list()


# ž 链表排序 (归并排序 merge sort)
# ž 用常数空间复杂度对链表排序,时间复杂度为 O ( n log n)
def getMiddle(ll):
    '''不存在dummy head 的ll'''
Esempio n. 2
0
    node1 = ll.head
    node2 = ll.head
    tmp = node2
    while node1 is not None:
        tmp = node2
        node2 = node2.next
        node1 = node1.next.next if node1.next is not None else None
    tmp.next = None
    # node2 中间节点
    back = node2
    front = ll.head
    return front, back


ll = LinkedList()
ll.add_first(2)
ll.add_first(3)
ll.add_first(4)
ll.add_first(5)

ll.print_list()

practice_work1(ll.head.next.next)

practice_work2(ll)

# 起一个循环链表
a = Node(1)
b = Node(2)
c = Node(3)
d = Node(4)