iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
自我挑戰組

初學者學習到的JavaScript 知識系列 第 29

鐵人賽DAY29-leetcode練習(三)

  • 分享至 

  • xImage
  •  

LeetCode的第2題是Add Two Numbers。
題目描述
給了兩個非空且非負整數的鏈表。每個節點只能存儲一位數字。將兩個數字相加,並以相同形式返回一個新的鏈表。

解題想法
這題的關鍵在於如何處理兩個鏈表的對應節點進行相加,以及處理進位問題。
1.從鏈表的頭部開始遍歷,對應節點相加。
2.若兩個節點的和大於或等於10,則需要向下一位進位。
3.當其中一個鏈表遍歷結束時,另一個鏈表還有節點,就要繼續處理未遍歷的部分。
4.如果遍歷完後還需要進位,則要在結果鏈表的尾部添加一個節點。

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);  //用於記錄結果鏈表的頭節點
        ListNode current = dummy;          //當前指針
        int carry = 0;                     //記錄進位

        while (l1 != null || l2 != null || carry != 0) {
            int val1 = (l1 != null) ? l1.val : 0;//若l1不為空,取它的值,否則取0
            int val2 = (l2 != null) ? l2.val : 0;//若l2不為空,取它的值,否則取0

            int sum = val1 + val2 + carry;  //將兩個節點的值和進位加起來
            carry = sum / 10;               //計算新的進位
            current.next = new ListNode(sum % 10); //計算當前節點的值

            current = current.next;
            if (l1 != null) l1 = l1.next;//如果l1還有下一個節點,移動到下一個節點
            if (l2 != null) l2 = l2.next;//如果l2還有下一個節點,移動到下一個節點
        }
        return dummy.next;               //返回結果鏈表的頭節點
    }
}

上一篇
鐵人賽DAY28-leetcode練習(二)
下一篇
鐵人賽DAY30-leetcode練習(四)
系列文
初學者學習到的JavaScript 知識30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言