两数相加-链表2-python&C++

python

1.考察的是对链表的操作;
2.python中深拷贝与浅拷贝。

# Definition for singly-linked list.
class ListNode: # 定义链表的单个节点
    def __init__(self, val=0, next=None):
         self.val = val
         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = curr = ListNode() 
        # head用来返回,curr用来遍历,head与curr是浅拷贝,头节点可以只包括指针
        carry = val = 0

        while carry or l1 or l2:
            val = carry

            if l1: l1, val = l1.next, l1.val + val
            if l2: l2, val = l2.next, l2.val + val

            carry, val = divmod(val, 10) # divmod()输出一个tuple,包括商和余数
            curr.next  = ListNode(val)
            curr = curr.next # 遍历到新加元素上
        
        return head.next

C++

class Solution {
    
    
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    
    
        int val = 0;
        int carry = 0;
        ListNode * head = new ListNode(100);
        ListNode * curr = head;
        while(l1 != nullptr || l2 != nullptr || carry != 0){
    
    
            val = carry;
            if (l1 != nullptr){
    
    
                val += l1->val;
                l1 = l1->next;
            }
            if (l2 != nullptr){
    
    
                val += l2->val;
                l2 = l2->next;
            }
            carry = val / 10;
            val = val % 10;
            curr->next = new ListNode(val);
            curr = curr->next;
        }
        return head->next;
    }
};

猜你喜欢

转载自blog.csdn.net/VaccyZhu/article/details/113663978