Example #1
0
 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
Example #2
0
 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
Example #3
0
    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
Example #4
0
    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)
Example #6
0
    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