Exemple #1
0
 def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
     if not l1:
         return l2
     if not l2:
         return l1
     if l1.val < l2.val:
         l1.next = self.mergeTwoLists(l1.next, l2)
         return l1
     else:
         l2.next = self.mergeTwoLists(l1, l2.next)
         return l2
 def reverseList1(self, head):
     """
     :type head: ListNode
     :rtype: ListNode
     """
     # 迭代:头插法
     dummy = ListNode(0)
     while head:
         q = head.next
         head.next = dummy.next
         dummy.next = head
         head = q
     return dummy.next
 def removeElements2(self, head, val):
     """
     :type head: ListNode
     :type val: int
     :rtype: ListNode
     """
     # 大神简化版,思想同上
     dummy = ListNode(0)
     dummy.next = head
     cur = dummy
     while cur.next:
         if cur.next.val == val:
             cur.next = cur.next.next
         else:
             cur = cur.next
     return dummy.next
Exemple #4
0
    def swapPairs1(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        # 循环
        dummy = ListNode(0)
        dummy.next = head
        current = dummy

        while current.next and current.next.next:
            node1 = current.next
            node2 = node1.next
            node1.next = node2.next
            node2.next = node1
            current.next = node2
            current = current.next.next
        return dummy.next
 def removeElements1(self, head, val):
     """
     :type head: ListNode
     :type val: int
     :rtype: ListNode
     """
     # 遍历链表,使用哑节点,不需为头结点特殊定制逻辑
     dummy = ListNode(0)
     dummy.next = head
     pre = dummy
     p = head
     while p:
         if p.val == val:
             pre.next = p.next
             del p
             p = pre.next
         else:
             pre = pre.next
             p = p.next
     return dummy.next
 def addTwoNumbers(self, l1, l2):
     """
     :type l1: ListNode
     :type l2: ListNode
     :rtype: ListNode
     """
     dummy = ListNode(0)
     dummy.next = l2
     cur = dummy
     carry = 0
     while l1 or l2:
         x = l1.val if l1 else 0
         y = l2.val if l2 else 0
         sum = x + y + carry
         carry = sum // 10
         cur.next = ListNode(sum % 10)
         cur = cur.next
         l1 = l1.next if l1 else None
         l2 = l2.next if l2 else None
     if carry:
         cur.next = ListNode(carry)
     return dummy.next
Exemple #7
0
    # 递归
    # 终止条件:当l1为空或l2为空时结束
    # 返回值:每一层调用都返回排序好的链表头
    # 本级递归内容:如果l1的val值更小,则将l1.next与排序好的链表头相接;l2同理
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:
            return l2
        if not l2:
            return l1
        if l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1, l2.next)
            return l2


if __name__ == '__main__':
    l1 = ListNode(1)
    l1.next = ListNode(2)
    l1.next.next = ListNode(4)

    l2 = ListNode(1)
    l2.next = ListNode(3)
    l2.next = ListNode(4)

    Sol = Solution()
    res = Sol.mergeTwoLists(l1, l2)
    while res:
        print(res.val)
        res = res.next
                cur = cur.next
        return dummy.next

    def removeElements3(self, head, val):
        """
        :type head: ListNode
        :type val: int
        :rtype: ListNode
        """
        # 递归
        if not head:
            return None
        head.next = self.removeElements3(head.next, val)
        if head.val == val:
            return head.next
        else:
            return head


if __name__ == '__main__':
    head = ListNode(1)
    head.next = ListNode(2)
    head.next.next = ListNode(3)
    Sol = Solution()
    res = Sol.removeElements3(head, val=3)

    p = res
    while p:
        print(p.val)
        p = p.next
        dummy = ListNode(0)
        dummy.next = l2
        cur = dummy
        carry = 0
        while l1 or l2:
            x = l1.val if l1 else 0
            y = l2.val if l2 else 0
            sum = x + y + carry
            carry = sum // 10
            cur.next = ListNode(sum % 10)
            cur = cur.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        if carry:
            cur.next = ListNode(carry)
        return dummy.next


if __name__ == '__main__':
    l1 = ListNode(5)
    # l1.next = ListNode(4)
    # l1.next.next = ListNode(3)

    l2 = ListNode(5)
    # l2.next = ListNode(6)
    # l2.next.next = ListNode(4)

    Sol = Solution()
    res = Sol.addTwoNumbers(l1, l2)

    print(res)
            p = r
            r = r.next
            p.next = pre
        return p

    def reverseList3(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        # 递归
        # 1.找终止条件。节点或下一个节点不存在时终止。
        # 2.找返回值。返回翻转后的链表。
        # 3.本级递归应该做什么。
        if not head or not head.next:
            return head
        p = self.reverseList3(head.next)
        head.next.next = head
        head.next = None
        return p


if __name__ == '__main__':
    head = ListNode(1)
    Sol = Solution()
    res = Sol.reverseList3(head)
    p = res
    while p:
        print(p.val)
        p = p.next