leetcode 鍊錶 445 兩數相加 II

2021-08-21 13:01:35 字數 1456 閱讀 8333

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。

你可以假設除了數字 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 ...