Exemplo n.º 1
0
def rotateRight(head: ListNode, k: int) -> ListNode:
    p = ListNode("NULL", head)
    if not p.next or not p.next.next:
        return p.next
    if not p.next.next.next:
        k = k % 2
        if k == 0:
            return p.next
        else:
            p.next.next.next = p.next
            p.next = p.next.next
            p.next.next.next = None
            return p.next
    node_pointer1 = p.next
    length = 1
    while node_pointer1.next:
        length += 1
        node_pointer1 = node_pointer1.next
    k = k % length
    if k == 0:
        return p.next
    else:
        node_pointer2 = p.next
        for i in range(length - 1, k, -1):
            node_pointer2 = node_pointer2.next
        node_pointer1.next = p.next
        p.next = node_pointer2.next
        node_pointer2.next = None
        return p.next
Exemplo n.º 2
0
def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
    def pushInStack(node: ListNode) -> List[int]:
        p = node
        result = []
        while p:
            result.append(p.val)
            p = p.next
        return result
    list1 = pushInStack(l1)
    list2 = pushInStack(l2)
    l3 = ListNode("NULL")
    carry = 0
    while True:
        the_sum = 0
        if list1:
            the_sum += list1.pop()
        if list2:
            the_sum += list2.pop()
        the_sum += carry
        if the_sum > 9:
            carry = 1
        else:
            carry = 0
        if not l3.next:
            l3.next = ListNode(the_sum % 10)
        else:
            new_pointer = ListNode(the_sum % 10, l3.next)
            l3.next = new_pointer
        if not list1 and not list2 and carry == 0:
            break
    return l3.next
Exemplo n.º 3
0
 def reverse(node: ListNode) -> None:
     pre = None
     cur = node.next
     la = cur.next
     node.next = None
     while cur:
         cur.next = pre
         pre = cur
         cur = la
         if la:
             la = la.next
     node.next = pre
Exemplo n.º 4
0
def deleteDuplicates(head: ListNode) -> ListNode or None:
    val = []
    p = ListNode("NULL", head)
    pointer = p
    while pointer.next:
        pointer = pointer.next
        val.append(pointer.val)
    dic = sorted(set(val))
    p.next = None
    pointer = p
    for num in dic:
        pointer.next = ListNode(num)
        pointer = pointer.next
    return p.next
Exemplo n.º 5
0
def deleteDuplicates(head: ListNode) -> ListNode or None:
    q = ListNode("NULL", head)
    val = {}
    pointer = q
    while pointer.next:
        pointer = pointer.next
        if pointer.val not in val.keys():
            val.update({pointer.val: 1})
        else:
            val[pointer.val] += 1
    q.next = None
    pointer = q
    for num in val.keys():
        if val[num] == 1:
            pointer.next = ListNode(num)
            pointer = pointer.next
    return q.next
Exemplo n.º 6
0
                    while slow != fast:
                        slow = slow.next
                        count += 1
                    return count
                if fast.next:
                    fast = fast.next
                else:
                    return count
            slow = slow.next
        return count

    size = getCycleSize()
    if size > 0:
        p = ListNode("NULL", head)
        pre = p
        for j in range(0, size):
            pre = pre.next
        last = p.next
        while pre.next != last:
            last = last.next
            pre = pre.next
        return last


if __name__ == "__main__":
    cycle_end = ListNode(4)
    cycle_start = ListNode(2, ListNode(3, cycle_end))
    cycle_end.next = cycle_start
    test = ListNode(1, cycle_start)
    detectCycle(test)