leetcode c++ 简单题之两数相加
个人解答
class Solution {
public :
ListNode* addTwoNumbers ( ListNode* l1, ListNode* l2) {
ListNode * head = new ListNode ( - 1 ) ;
ListNode * p = head;
int sum = 0 ;
int temp;
int flag= 0 ;
int n1, n2;
while ( l1 || l2) {
n1 = l1? l1- > val: 0 ;
n2 = l2? l2- > val: 0 ;
temp = n1 + n2 + flag;
p- > next = new ListNode ( temp % 10 ) ;
flag = temp / 10 ;
p = p- > next;
l1? l1 = l1- > next: l1 = l1;
l2? l2 = l2- > next: l2 = l2;
}
if ( flag) {
p- > next = new ListNode ( flag) ;
}
return head- > next;
}
} ;
官方答案
class Solution {
public :
ListNode* addTwoNumbers ( ListNode* l1, ListNode* l2) {
ListNode * head = nullptr , * tail = nullptr ;
int carry = 0 ;
while ( l1 || l2) {
int n1 = l1 ? l1- > val: 0 ;
int n2 = l2 ? l2- > val: 0 ;
int sum = n1 + n2 + carry;
if ( ! head) {
head = tail = new ListNode ( sum % 10 ) ;
} else {
tail- > next = new ListNode ( sum % 10 ) ;
tail = tail- > next;
}
carry = sum / 10 ;
if ( l1) {
l1 = l1- > next;
}
if ( l2) {
l2 = l2- > next;
}
}
if ( carry > 0 ) {
tail- > next = new ListNode ( carry) ;
}
return head;
}
} ;
作者:LeetCode- Solution
链接:https: / / leetcode- cn. com/ problems/ add- two- numbers/ solution/ liang- shu- xiang- jia- by- leetcode- solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
个人总结
创建头节点便于后面的操作 刚开始用老实人办法即把节点数转换为实数相加后再用链表分别装,但是当遇到很大的数字的时候就会溢出,尝试过long long、float等,都不太管用,看了评论区才开始尝试逐位相加