兩數相加c 演算法篇 鍊錶之兩數相加

2021-10-16 01:54:03 字數 1944 閱讀 1301

演算法: 核心問題是進製的操作:

1)不要忘記進製之後的哪乙個1;

2)不要忘記所有位都操作完了之後,最後的哪乙個進製1

變形題目的話,需要想辦法轉換成 題目1這種原子操作的題目。

題目 1: 兩數相加:

// 演算法: 核心問題是:進製的操作,// 1)不要忘記進製之後的哪乙個1;// 2)不要忘記所有位都操作完了之後,最後的哪乙個進製1/** * definition for singly-linked list. * type listnode struct  */func addtwonumbers(l1 *listnode, l2 *listnode) *listnode   if l2 == nil   h := new(listnode)  pre,res := h,h    m, n := l1, l2  for  m != nil && n != nil     pre = res    res.val = sum % 10    res.next = tmp        res = res.next    m = m.next    n = n.next  }      for m != nil     pre = res    res.val = s % 10    res.next = tmp        res = res.next    m = m.next  }  for n != nil     pre = res    res.val = s % 10    res.next = tmp        res = res.next    n = n.next  }  if res.val == 0   return h}
執行結果:

題目 2: 兩數之和:

**實現:

// 演算法:實現方式與題目1一致,// 本題**相當於對題目1的解法做了乙個**層面的優化/** * definition for singly-linked list. * type listnode struct  */func addtwonumbers(l1 *listnode, l2 *listnode) *listnode  else         tmp := listnode        res.next = &tmp        l1 = l1.next        l2 = l2.next        res = res.next    }    // 位數不同的兩個數的,高位數計算    var result *listnode    if l1 != nil  else if l2 != nil     for result != nil  else         tmp := listnode        res.next = &tmp        result = result.next        res = res.next     }    // 最後的進製    if r  != 0         res.next = &tmp    }    return n.next}
執行結果:

題目 3 :兩數相加

執行結果:

兩數相加 鍊錶

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

兩煉表數相加

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...

鍊錶兩數相加

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...