leetcode——2. 两数相加

第一次解除到链表相关的题目,不会做,看了别人答案。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        n=l1.val+l2.val
        l3=ListNode(n%10)
        l3.next=ListNode(n//10)
        p1=l1.next
        p2=l2.next
        p3=l3
        while True:
            if p1 and p2:
                sum=p1.val+p2.val+p3.next.val
                p3.next.val=sum%10
                p3.next.next=ListNode(sum//10)
                p1=p1.next
                p2=p2.next
                p3=p3.next
            elif p1 and not p2:
                sum=p1.val+p3.next.val
                p3.next.val=sum%10
                p3.next.next=ListNode(sum//10)
                p1=p1.next
                p3=p3.next
            elif not p1 and p2:
                sum=p2.val+p3.next.val
                p3.next.val=sum%10
                p3.next.next=ListNode(sum//10)
                p2=p2.next
                p3=p3.next
            else:
                if p3.next.val==0:
                    p3.next=None
                break
        return l3
执行用时 :108 ms, 在所有 python3 提交中击败了32.62%的用户
内存消耗 :13.8 MB, 在所有 python3 提交中击败了5.06%的用户
 
不求其他,看懂就好。
执行用时为 52 ms 的范例
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        carry = 0
        head = ListNode(0)
        node = head
        while l1 and l2:
            sum1 = l1.val + l2.val + carry
            carry = sum1//10
            tmp = sum1%10
            head.next = ListNode(tmp)
            head = head.next
            l1 = l1.next
            l2 = l2.next
        while l1:
            sum1 = l1.val+carry
            carry = sum1//10
            tmp = sum1%10
            head.next = ListNode(tmp)
            head = head.next
            l1 = l1.next
        while l2 :
            sum1 = l2.val + carry
            carry = sum1//10
            tmp = sum1%10
            head.next = ListNode(tmp)
            head = head.next
            l2 = l2.next
        if carry:
            head.next = ListNode(carry)
            head = head.next
        return node.next

 

 

                                                                                                       ——2019.10.23

 
 完整版
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        prenode = ListNode(0)
        lastnode = prenode
        val = 0
        while val or l1 or l2:
            val, cur = divmod(val + (l1.val if l1 else 0) + (l2.val if l2 else 0), 10)
            lastnode.next = ListNode(cur)
            lastnode = lastnode.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return prenode.next


def generateList(l: list) -> ListNode:
    prenode = ListNode(0)
    lastnode = prenode
    for val in l:
        lastnode.next = ListNode(val)
        lastnode = lastnode.next
    return prenode.next

def printList(l: ListNode):
    while l:
        print("%d, " %(l.val), end = '')
        l = l.next
    print('')

if __name__ == "__main__":
    l1 = generateList([1, 5, 8])
    l2 = generateList([9, 1, 2, 9])
    printList(l1)
    printList(l2)
    s = Solution()
    sum = s.addTwoNumbers(l1, l2)
    printList(sum)

作者:xiao-lin-20
链接:https://leetcode-cn.com/problems/add-two-numbers/solution/cjie-ti-de-wan-zheng-dai-ma-bao-gua-sheng-cheng-ce/
来源:力扣(LeetCode)

 


 

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(-1);
        ListNode node = head;
        int v = 0;
        while(l1!=null && l2!= null){
            node.next = new ListNode(( v + l1.val + l2.val)%10);
            v = (l1.val + l2.val + v)/10;
            l1 = l1.next;
            l2 = l2.next;
            node = node.next;
        }
        while (l1 != null){
            node.next = new ListNode(( v + l1.val)%10);
            v = (l1.val+v)/10;
            l1 = l1.next;
            node = node.next;
        }
        while (l2 != null){
            node.next = new ListNode(( v + l2.val)%10);
            v = (l2.val+v)/10;
            l2 = l2.next;
            node = node.next;
        }
        if(v != 0){
            node.next = new ListNode(v);
        }
        return head.next;
    }

 

 ——2020.7.13

 
 
 
posted @ 2019-10-23 16:55  欣姐姐  阅读(149)  评论(0编辑  收藏  举报