leetcode[2]两数相加
思路:每一位都对应相加,记录进位数,每一位的和都为当前这两个数以及前一位的进位数;
(%10 /10的过程)
长度短的后面补零。
最后一个如果有进位数,需开辟空间,来储存这个进位数
C语言:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head=NULL,*tail=NULL;
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=malloc(sizeof(struct ListNode));
tail->val=sum%10;
tail->next=NULL;
}else{
tail->next=malloc(sizeof(struct ListNode));
tail->next->val=sum%10;
tail=tail->next;
tail->next=NULL;
}
carry=sum/10;
if(l1){
l1=l1->next;
}
if(l2){
l2=l2->next;
}
}
if(carry>0){
tail->next=malloc(sizeof(struct ListNode));
tail=tail->next;
tail->val=carry;
tail->next=NULL;
}
return head;
}
JS代码:
(利用new来创建对象,可以将值传进去)
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let head=null;
let tail=null;
let carry=0;
while(l1||l2){
const n1=l1?l1.val:0;
const n2=l2?l2.val:0;
const sum=n1+n2+carry;
if(!head){
head=tail=new ListNode(sum%10);
}else{
tail.next=new ListNode(sum%10);
tail=tail.next;
}
carry=Math.floor(sum/10);
if(l1){
l1=l1.next;
}
if(l2){
l2=l2.next;
}
}
if(carry>0){
tail.next=new ListNode(carry);
}
return head;
};