題目:
給你兩個 非空 的鏈表,表示兩個非負的整數,它們每位數字都是按照 逆序 的方式存盤的,并且每個節點只能存盤 一位 數字,
請你將兩個數相加,并以相同形式回傳一個表示和的鏈表,
你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭,

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
提示:
每個鏈表中的節點數在范圍 [1, 100] 內
0 <= Node.val <= 9
題目資料保證串列表示的數字不含前導零
做題
首先大家都知道題要求我們用鏈表解答那我們肯定要先建一個鏈表節點的類啊
class ListNode {
int val=0;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
這個類就不用我解釋了吧,這要是看著還有點費勁我建議還是去好好學學資料結構和Java基礎知識吧,要是要不到資源,下方留言我提供,廢話不多說接著開始,
我這個解題方法跟官網上的還不一樣,我是剛開始接觸力扣我看題的形式我還以為要輸入串列,然后轉化為鏈表在運算呢,所以就有了以下的搞笑行為,來看看吧
先建立了陣列串列:
public static List arry() {
List l=new ArrayList();
Scanner sc=new Scanner(System.in);
System.out.print("請輸入以#結尾:");
boolean flag=true;
//判斷要是出現不是int型的資料就結束
while(flag) {
try {
l.add(sc.nextInt());
flag=true;
}catch (Exception e) {
flag=false;
}
}
return l;
}
這里我先建立了鏈表,😅確實尷尬本來想重新寫呢,后來一想都寫好了就沒有弄掉
接著將陣列串列轉化為鏈表:
public static ListNode arryTransferList(List<Integer> a) {
ListNode head1 = null;
for(int i:a) {
if(head1==null) {
ListNode temp=new ListNode(i,null);
head1=temp;
lis=head1;
}else {
ListNode temp=new ListNode(i,null);
lis.next=temp;
lis=temp;
}
}
return head1;
}
也沒什么高深的地方,但是大家要注意一下List<Integer> a里面的Integer不能寫成int會報錯的,
最后就是關鍵代碼了:
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode d = new ListNode();
ListNode curr = d;
int carry = 0;
//當兩個鏈表任意一個沒有結束都接著進行
while (l1 != null || l2 != null) {
int x = l1 == null ? 0 : l1.val;//下面解釋
int y = l2 == null ? 0 : l2.val;
int sum = x + y + carry;
curr.next = new ListNode(sum % 10);//大于9取個位
curr = curr.next;
carry = sum / 10;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry != 0) curr.next = new ListNode(carry);
return d.next;
}
這里使用了三目運算int x = l1 == null ? 0 : l1.val;這里的意思是在兩個鏈表長度不一樣的時候當一個鏈表已經加完了處于這個階段時

給該節點的值假設成0這樣不妨礙后面的運算,
好了今天的演算法題就到這里了,我們明天再見,歡迎關注本專欄我們一起學習
🎃特別介紹:
📣小白練手專欄,適合剛入手的新人歡迎訂閱編程小白進階
📣有什么不明白的歡迎私信或留言,得到細致講解,另外想要進階的朋友可以關注練手專案專欄
📣另外想學JavaWeb進廠的同學可以看看這個專欄:傳送們
📣是個面試和考研的演算法練習我們一起加油上岸之路

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292033.html
標籤:其他
上一篇:Linux常用指令
