給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
高階:
如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。
示例:
輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)輸出:7 -> 8 -> 0 -> 7//***************===鍊錶轉成陣列,累加,再轉換成鍊錶***********************************====
/*** definition for singly-linked list.
* struct listnode ;
*/struct listnode* addtwonumbers(struct listnode* l1, struct listnode* l2)
//計算l2的長度
int len2=0;
struct listnode *next2 = l2;
while(next2)
//計算l1和l2的最大長度
int len = len1 > len2 ? len1 : len2;
//設定乙個最大長度的陣列
int a[len];
//把l1中的節點數值存放到陣列裡面去
next1 = l1;
int i = len - len1, idx = 0;
while(next1) else
}//把l2中的節點數值存放到陣列裡面去,與l1中的數值相累加
i = len - len2;
idx = 0;
next2 = l2;
while(next2) else
}//從陣列索引最大值len-1,即鍊錶中的最後乙個數,建立節點作為初始的頭節點
struct listnode *head = malloc(sizeof(struct listnode));
head->val = a[len-1] % 10;
head->next=null;
int s = a[len-1] / 10; //進製標記
//該節點作為新鍊錶的頭結點
struct listnode *pnext = head;
struct listnode *node=null;
//陣列程度為len,最大索引len-1已經建立節點,則從len-2開始往前遍歷
for(i=len-2;i>=0;i--)
//如果有進製標記,則說明兩者累加最高位有進製
if(s == 1)
return pnext;
}
leetcode 445 兩數相加II(鍊錶)
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...
leetcode 445 兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。輸入 7 2 4 3 5 6 4 輸出 7 8 0 7 分別遍歷兩個鍊錶,將鍊錶代表的數存於a,b 根據a,b的和,用...
Leetcode445 兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...