題目描述
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 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 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?解題思路 原地旋轉鍊錶,可以構建兩個指標,乙個指向當前結點的前乙個,乙個指向當前的結點,每次迴圈的時候,找到當前鍊錶的下乙個,在翻轉的過程中,將...