Esempio n. 1
0
def sort_from_pivot(linked_list, k):
    small_list = None
    large_list = None
    first_value = linked_list.get(0).val
    if first_value < k:
        small_list = Node(first_value)
    else:
        large_list = Node(first_value)
    for i in range(1, linked_list.getLength()):
        value = linked_list.get(i).val
        if value < k:
            if small_list == None:
                small_list = Node(value)
            else:
                small_list.add(value)
        else:
            if large_list == None:
                large_list = Node(value)
            else:
                large_list.add(value)
    concat(small_list, large_list)
    return small_list
Esempio n. 2
0

def reverseBetween(head: Node, m: int, n: int) -> Node:
    # except
    if not head or m == n:
        return head

    root = st = Node(None)
    root.next = head
    # st, end 지정
    for _ in range(m - 1):
        st = st.next
    end = st.next

    # important!!
    for _ in range(n - m):
        tmp, st.next, end.next = st.next, end.next, end.next.next
        st.next.next = tmp
    return root.next


linkedlist = Node(1)
linkedlist.add(Node(2))
linkedlist.add(Node(3))
linkedlist.add(Node(4))
linkedlist.add(Node(5))
linkedlist.add(Node(None))
linkedlist.prt()

sol = reverseBetween(linkedlist, 2, 4)
sol.prt()
Esempio n. 3
0
            if lists[i]:
                heapq.heappush(heap, (lists[i].data, i + 500, lists[i]))
        print("heap: ", heap)
        while heap:
            node = heapq.heappop(heap)
            idx = node[1]
            result.next = node[2]

            result = result.next
            if result.next:
                heapq.heappush(heap, (result.next.data, idx, result.next))
        print(result)
        return root.next


# linkedlist.add(Node(2))
l1 = Node(1)
l1.add(Node(4))
l1.add(Node(5))
l1.prt()

l2 = Node(1)
l2.next = Node(3)
l2.next.next = Node(4)
l2.prt()

l3 = Node(2)
l3.next = Node(6)

sol = Solution().mergeKLists([l1, l2, l3])
sol.prt()
Esempio n. 4
0
            else:
                small_list.add(value)
        else:
            if large_list == None:
                large_list = Node(value)
            else:
                large_list.add(value)
    concat(small_list, large_list)
    return small_list


def concat(linkedList1, linkedList2):
    last_node_linkedList1 = linkedList1.get(linkedList1.getLength() - 1)
    first_node_linkedList2 = linkedList2.get(0)
    last_node_linkedList1.nex = first_node_linkedList2
    last_node_linkedList1.nex.prev = last_node_linkedList1


linkedList = Node(5)
linkedList.add(1)
linkedList.add(8)
linkedList.add(0)
linkedList.add(3)
linkedList.add(7)
linkedList.add(2)
linkedList.add(9)
print_linked_list(linkedList)

pivot = 7
sorted_linkedList = sort_from_pivot(linkedList, pivot)
print_linked_list(sorted_linkedList)
Esempio n. 5
0
# 24. swap nodes in pairs
# 연결 리스트를 입력받아 페어 단위로 스왑.
from LinkedList import Node


def swapPairs(head: Node) -> Node:
    cur = head

    while cur and cur.next:
        # 값만 교환
        cur.data, cur.next.data = cur.next.data, cur.data
        cur = cur.next.next

    return head


linkedlist = Node(1)
linkedlist.add(Node(2))
linkedlist.add(Node(3))
linkedlist.add(Node(4))
linkedlist.add(Node(5))
linkedlist.add(Node(6))

sol = swapPairs(linkedlist)
sol.prt()