Leetcode兩數相加
給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head=null,tail=null;
int sum=0;
int result=0;
int carry=0;
while(l1!=null||l2!=null){
int param1= l1!=null ? l1.val:0;
int param2= l2!=null ? l2.val:0;
sum=param1+param2+carry;
result=sum%10;
carry=sum/10;
if(head==null){
head=tail=new ListNode(result);
}
else{
tail.next=new ListNode(result);
tail=tail.next;
}
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
if(carry>0)
tail.next=new ListNode(carry);
return head;
}
}
public class MainClass {
public static int[] stringToIntegerArray(String input) {
input = input.trim();
input = input.substring(1, input.length() - 1);
if (input.length() == 0) {
return new int[0];
}
String[] parts = input.split(",");
int[] output = new int[parts.length];
for(int index = 0; index < parts.length; index++) {
String part = parts[index].trim();
output[index] = Integer.parseInt(part);
}
return output;
}
public static ListNode stringToListNode(String input) {
// Generate array from the input
int[] nodeValues = stringToIntegerArray(input);
// Now convert that list into linked list
ListNode dummyRoot = new ListNode(0);
ListNode ptr = dummyRoot;
for(int item : nodeValues) {
ptr.next = new ListNode(item);
ptr = ptr.next;
}
return dummyRoot.next;
}
public static String listNodeToString(ListNode node) {
if (node == null) {
return "[]";
}
String result = "";
while (node != null) {
result += Integer.toString(node.val) + ", ";
node = node.next;
}
return "[" + result.substring(0, result.length() - 2) + "]";
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
ListNode l1 = stringToListNode(line);
line = in.readLine();
ListNode l2 = stringToListNode(line);
ListNode ret = new Solution().addTwoNumbers(l1, l2);
String out = listNodeToString(ret);
System.out.print(out);
}
}
}
相關文章
- LeetCode——兩數相加LeetCode
- LeetCode 2——兩數相加LeetCode
- 【leetcode】【2、兩數相加】LeetCode
- 【LeetCode】2 兩數相加LeetCode
- LeetCode-兩數相加LeetCode
- LeetCode 2.兩數相加LeetCode
- leetcode 2. 兩數相加LeetCode
- LeetCode 第二題兩數相加LeetCode
- LeetCode題集-2 - 兩數相加LeetCode
- leetcode之兩數相加解題思路LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- 【刷演算法】LeetCode.2-兩數相加演算法LeetCode
- LeetCode2: Add two numbers(兩數相加)LeetCode
- [LeetCode] Add Two Numbers 兩個數字相加LeetCode
- 2. 兩數相加
- 演算法-兩數相加演算法
- LeetCode-2. 兩數相加(連結串列+大數加法模擬)LeetCode
- 簡單演算法題:leetcode-2 兩數相加演算法LeetCode
- 從零打卡leetcode之day 2---兩數相加LeetCode
- 演算法5: LeetCode_單連結串列_兩數相加演算法LeetCode
- LeetCode高頻演算法面試題 - 002 - 兩數相加LeetCode演算法面試題
- Leetcode:2. 兩數相加(C++帶詳細註釋)LeetCodeC++
- 程式設計題-兩數相加程式設計
- leetcode 解題 2.兩數相加-python3 題解LeetCodePython
- JavaScript兩數相加(踩坑)記錄JavaScript
- leetcode 兩數相加(add two numbers) Python程式設計實現LeetCodePython程式設計
- 力扣題解2-兩數相加力扣
- 演算法--力扣2. 兩數相加演算法力扣
- 神奇補0解決連結串列相加:LeeCode002兩數相加
- Q30 LeetCode454 四數相加2LeetCode
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- 讓我們一起啃演算法----兩數相加演算法
- LeetCode 29——兩數相除LeetCode
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode
- LeetCode之兩數之和LeetCode
- LeetCode-兩數之和LeetCode