LeetCode刷題之鍊錶兩數相加

2021-09-26 06:28:56 字數 1632 閱讀 5283

題目描述

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

解法一:

1.統計兩鍊錶的長度

2.將長度少的鍊錶補0,使兩個鍊錶長度一致

3.進行相加,若有進製則補乙個新的節點

對於解法一,根據返回的鍊錶是否是原有的,有兩種**。

在原有鍊錶上操作

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

while(q->next!=null)

if (len1>len2)//不足就補0

}else

}p=l1;

q=l2;

//在原有鍊錶上操作

bool carry=0;//carry 指是否有進製

while(p!=null&&q!=null)

p=l1;

if (carry)//最後乙個節點是否進製

p->next=new listnode(1);

}return l1;

}};

新建乙個鍊錶

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

while(q->next!=null)

if (len1>len2)//不足就補0

}else

}p=l1;

q=l2;

listnode* l3=new listnode(-1);//建立新的鍊錶

listnode* r=l3;

bool carry=0;

int temp=0;

while(p!=null&&q!=null)

if (carry)

return l3->next;

}};

方法二:

不對齊補零,若煉表不為空,則進行操作,考慮進製。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

if (l2!=null)

if (carry)

r->next=new listnode(temp%10);

carry=temp>=10?true:false;

r=r->next;

}if (carry)//若最後乙個節點存在進製

return l3->next;

}};

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

LeetCode刷題 , 兩數之和 , 雜湊表

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...

Leetcode鍊錶刷題之 206 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?解題思路 原地旋轉鍊錶,可以構建兩個指標,乙個指向當前結點的前乙個,乙個指向當前的結點,每次迴圈的時候,找到當前鍊錶的下乙個,在翻轉的過程中,將...