Example #1
0
    def insert_head(self, node: ListNode):
        head_o = self.head()
        node.next_node = head_o
        head_o.prev_node = node
        node.prev_node = None
        self.__head = node

        self.__length += 1
Example #2
0
    def insert_tail(self, node: ListNode):
        tail_o = self.tail()
        node.prev_node = tail_o
        tail_o.next_node = node
        node.next_node = None
        self.__tail = node

        self.__length += 1
Example #3
0
	def insert_tail(self, node: ListNode):
		tail_o = self.tail()
		self.__anchor.prev_node = node
		node.prev_node = tail_o
		tail_o.next_node = node
		node.next_node = self.__anchor

		self.__length += 1
Example #4
0
	def insert_head(self, node: ListNode):
		head_o = self.head()
		self.__anchor.next_node = node
		node.next_node = head_o
		head_o.prev_node = node
		node.prev_node = self.__anchor

		self.__length += 1
Example #5
0
    def append(self, node: ListNode):
        self.__tail.next_node = node
        self.__tail = node

        if node is not None:
            node.next_node = None

        self.__length += 1
Example #6
0
    def insert_head(self, node: ListNode):
        if self.head() is None:
            self.__head = node
        else:
            head_o = self.head()
            node.next_node = head_o
            self.__head = node

        self.__length += 1
Example #7
0
	def __merge(self, left: ListNode, right: ListNode):
		if left == self.__anchor:
			return right
		if right == self.__anchor:
			return left

		# Compare two ListNodes and return the head
		choice = self.__compare(left, right)
		if choice == 0:
			next_n = self.__merge(left.next_node, right.next_node)
			left.next_node = next_n
			next_n.prev_node = left
			return left
		elif choice < 0:
			next_n = self.__merge(left.next_node, right)
			left.next_node = next_n
			next_n.prev_node = left
			return left
		else:
			next_n = self.__merge(left, right.next_node)
			right.next_node = next_n
			next_n.prev_node = right
			return right
    def merge_sort_k_way_(self, lists: [LinkedList_Double_Circular],
                          last: int):
        while last != 0:
            i = 0
            j = last

            # Sort a pair lists
            while i < j:
                ListNode(lists[0]).head = self.__merge_k_way(
                    lists[i], lists[j])
                i += 1
                j -= 1

                # Done with one round
                if i >= j:
                    last = j

        return lists[0]
    def __merge_k_way(self, left: LinkedList_Double_Circular,
                      right: LinkedList_Double_Circular):
        head = p = ListNode()

        anchor_left = left.get_anchor()
        anchor_right = right.get_anchor()
        left_n = left.head
        right_n = right.head

        # Compare the add to sorted list
        while left_n != anchor_left and right_n != anchor_right:
            choice = self.__compare(left_n, right_n)

            if choice == 0:
                p.next_node = left_n
                left_n.prev_node = p
                left_n = left_n.next_node
                right_n = right_n.next_node
            elif choice < 0:
                p.next_node = left_n
                left_n.prev_node = p
                left_n = left_n.next_node
            else:
                p.next_node = right_n
                right_n.prev_node = p
                right_n = right_n.next_node

        # Add the rest of the nodes
        if left_n != anchor_left:
            p.next_node = left_n
            left_n.prev_node = p
        else:
            p.next_node = right_n
            right_n.prev_node = p

        return head.next_node
Example #10
0
	def __init__(self):
		self.__anchor = ListNode()
		self.__anchor.next_node = self.__anchor
		self.__anchor.prev_node = self.__anchor
		self.__length = 0