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;
}
};