def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ reslist, head = None, None carry = 0 while l1 or l2: x = l1.val if l1 else 0 y = l2.val if l2 else 0 res = x + y + carry carry = res // 10 if reslist is None: reslist = ListNode(res % 10) head = reslist else: reslist.next = ListNode(res % 10) reslist = reslist.next if l1: l1 = l1.next if l2: l2 = l2.next if carry != 0: reslist.next = ListNode(carry) return head
def reverseKGroup_Iter(head, k): dmy = ListNode(-1) dmy.next = head tmp_pre = dmy while (head): tail = head cnt = 0 while (tail and cnt < k): tail = tail.next cnt += 1 if cnt < k: tmp_pre.next = head head = tail else: pre = head while (cnt > 0): tmp = head.next head.next = tail tail = head head = tmp cnt -= 1 tmp_pre.next = tail tmp_pre = pre return dmy.next
def createLL(n): head = None i = n while (i > 0): tmp = ListNode(i) tmp.next = head head = tmp i -= 1 return head
def remove_duplicate_node(root: ListNode): pre = ListNode(0) memo = set() pre.next = root point = pre while point.next: if point.next.val not in memo: memo.add(point.next.val) point = point.next else: point.next = point.next.next
def partition(root: ListNode, part_num: int): left, right = ListNode("l"), ListNode("r") left.next = root point1, point2 = left, right while point1.next: node = point1.next if node.val >= part_num: point1.next = node.next node.next = None point2.next = node point2 = point2.next else: point1 = point1.next point1.next = right.next
def remove_duplicate_node_without_extra_memory(root: ListNode): pre = ListNode(0) pre.next = root point = pre while point.next: point0 = root flag = False while point0 != point.next: if point0.val == point.next.val: flag = True point.next = point.next.next break point0 = point0.next if not flag: point = point.next
def insert_first_node(root: ListNode, val) -> ListNode: node = ListNode(val) node.next = root return node
def remove_node(node: ListNode): if node.next is None: return False node.val = node.next.val node.next = node.next.next