def reverseList2(self, head: ListNode) -> ListNode: if not head or head.next == None: return head res = self.reverseList2(head.next) head.next.next = head head.next = None return res
def removeNthFromEnd3(self, head: ListNode, n: int) -> ListNode: if not head: self.count = 0 return head head.next = self.removeNthFromEnd3(head.next, n) self.count += 1 return head.next if self.count == n else head
def removeNthFromEnd2(self, head: ListNode, n: int) -> ListNode: # dummy,添加头节点 dummy = ListNode(0) dummy.next = head # 快指针先走 n 步 slow, fast = dummy, dummy for _ in range(n): fast = fast.next # 快慢指针同时走,直到 fast 指针达到链表尾部节点,此时 slow 到达倒数第 n 个节点的前一个节点 while fast and fast.next: slow, fast = slow.next, fast.next # 删除节点并重新链接 slow.next = slow.next.next return dummy.next
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: # dummy,添加头节点 dummy = ListNode(0) dummy.next = head # 获取链表长度 cur, lenth = head, 0 while cur: lenth += 1 cur = cur.next # 找到倒数第 n 个节点前的那个节点 cur = dummy # 以示例为例,注意长度是 5 而不是 4 for _ in range(lenth - n): cur = cur.next # 删除节点并重新链接 cur.next = cur.next.next return dummy.next
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: """""" nodeA, nodeB = headA, headB while nodeA != nodeB: nodeA = nodeA.next if nodeA else headB nodeB = nodeB.next if nodeB else headA return nodeA if __name__ == '__main__': s = Solution() # [4, 1, 8, 4, 5] # [5, 6, 1, 8, 4, 5] nodei = ListNode(8) nodei.next = ListNode(4) nodei.next.next = ListNode(5) headA = ListNode(4) headA.next = ListNode(1) headA.next.next = nodei headB = ListNode(5) headB.next = ListNode(6) headB.next.next = ListNode(1) headB.next.next.next = nodei # [2,6,4] # [1, 5] # headA = ListNode(2) # headA.next = ListNode(6)
sumNum = int(l1Num[::-1]) + int(l2Num[::-1]) r1 = str(sumNum)[::-1] r2 = list(map(lambda x: ListNode(x), r1)) for i in range(len(r1) - 1): r2[i].next = r2[i + 1] node = r2[0] return node # Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) # Output: 7 -> 0 -> 8 n2 = ListNode(2) n4 = ListNode(4) n3 = ListNode(3) n2.next = n4 n4.next = n3 l5 = ListNode(5) l6 = ListNode(6) l4 = ListNode(4) l5.next = l6 l6.next = l4 r = addTwoNums(n2, l5) while r is not None: print(r.val) r = r.next