Stories

Detail Return Return

20241107,LeetCode 每日一題,使用 Go 計算兩數相加 - Stories Detail

思路

  1. 模擬加法:鏈表存儲的是逆序數位,因此從頭節點開始,逐位相加可以模擬正常的加法。每兩個節點的值相加,並記錄進位。
  2. 逐節點相加

    • 創建一個新的鏈表,用於存儲結果,每次將兩個鏈表對應節點的值加上進位值,結果存儲到新鏈表的節點中。
    • 計算過程中,將(l1.Val + l2.Val + carry)相加的結果拆成兩個部分,一部分是當前位的值,另一部分是進位值(例如:(l1.Val + l2.Val + carry) / 10)。
  3. 處理進位:若最終計算完鏈表後進位不為0,則在結果鏈表末尾增加一個新節點表示進位。
  4. 邊界條件:若鏈表長度不一,則將缺少的部分視為0;同時確保最後若存在進位,將其單獨處理。

代碼


type ListNode struct {
    Val  int
    Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) (head *ListNode) {
    var tail *ListNode
    carry := 0
    for l1 != nil || l2 != nil {
        var val1, val2 int
        if l1 != nil {
            val1 = l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            val2 = l2.Val
            l2 = l2.Next
        }
        sum := val1 + val2 + carry
        sum, carry = sum%10, sum/10
        if head == nil {
            head = &ListNode{sum, nil}
            tail = head
        } else {
            tail.Next = &ListNode{sum, nil}
            tail = tail.Next
        }
        if l1 == nil && l2 != nil {
            tail.Next = l2
            break
        }
        if l1 != nil && l2 == nil {
            tail.Next = l1
            break
        }
    }
    if carry > 0 {
        tail.Next = &ListNode{carry, nil}
    }
    return
}
user avatar y_luoe_hai_61a734cbf3c94 Avatar leguandeludeng Avatar xialeistudio Avatar liubo86 Avatar tecdat Avatar secretflow Avatar 49u7s8yz Avatar hzyopsfuture Avatar chinesehuazhou Avatar huamingshixunkeji Avatar dongyf Avatar aurora700 Avatar
Favorites 17 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.