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