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'''
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)