一、題目
給你兩個非空的鏈表,表示兩個非負的整數,它們每位數字都是按照逆序的方式存盤的,并且每個節點只能存盤一 數字,請你將兩個數相加,并以相同形式回傳一個表示和的鏈表,
可以假設除了數字 0 之外,這兩個數都不會以 0 開頭,
示例 1:

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
二、解法
以逆序鏈表的方式存盤數字,非常適合于兩數相加,這時候,鏈表頭代表數字的最低位,只需從頭向尾遍歷,依次相加進位即可,
以最短的數的鏈表為終點,然后再將較長的數的后續位加入新的鏈表中,
Python版:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
upper_val = 0
dummy = ListNode(0)
cur = dummy
while l1 and l2:
value = https://www.cnblogs.com/justLittleStar/p/l1.val + l2.val + upper_val
upper_val = value // 10
tmp_node = ListNode(value % 10)
cur.next = tmp_node
cur = tmp_node
l1, l2 = l1.next, l2.next
remain_l = l1 if l1 else l2
while remain_l:
value = remain_l.val + upper_val
upper_val = value // 10
tmp_node = ListNode(value % 10)
cur.next = tmp_node
cur = tmp_node
remain_l = remain_l.next
if upper_val > 0:
tmp_node = ListNode(upper_val)
cur.next = tmp_node
return dummy.next
C語言版:
# include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* l = NULL;
struct ListNode* cur = NULL;
// struct ListNode* tmp = NULL;
l = malloc(sizeof(struct ListNode));
l->val = 0;
l->next = NULL;
cur = l;
int value = https://www.cnblogs.com/justLittleStar/p/0;
int upperVal = 0;
while (l1 != NULL && l2 != NULL) {
value = l1->val + l2->val + upperVal;
upperVal = value / 10;
value = value % 10;
struct ListNode* tmp_node = malloc(sizeof(struct ListNode));
tmp_node->val = value;
tmp_node->next = NULL;
cur->next = tmp_node;
cur = cur->next;
l1 = l1->next;
l2 = l2->next;
}
if (l1 == NULL) {
while (l2 != NULL ) {
value = l2->val + upperVal;
upperVal = value / 10;
l2->val = value % 10;
cur->next = l2;
cur = cur->next;
l2 = l2->next;
}
}
if (l2 == NULL) {
while (l1 != NULL ) {
value = l1->val + upperVal;
upperVal = value / 10;
l1->val = value % 10;
cur->next = l1;
cur = cur->next;
l1 = l1->next;
}
}
if (upperVal > 0) {
struct ListNode* node = malloc(sizeof(struct ListNode));
node->val = upperVal;
node->next = NULL;
cur->next = node;
}
return l->next;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498630.html
標籤:其他
上一篇:ArrayList原始碼深度剖析,從最基本的擴容原理,到魔幻的迭代器和fast-fail機制,你想要的這都有!!!
下一篇:高斯噪音 降維 資料壓縮 argmax 奇異值分解(SVD)PCA、ZCA白化 核主成分分析 LDA(線性判別分析)
