[Leetcode题解]2. 两数相加-链表遍历和重构

1. 审题leetcode 02 add-two-numbers​

我们先看一下题目,如下  :

[Leetcode题解]2. 两数相加-链表遍历和重构

链表的从前往后为数字的低位到高位,模拟加法手算过程,从前往后遍历即可, 注意每个数字0-9,进位要处理好;

 

2. 解体思路

主要分4步来完成,增加一个头节点来处理后续的添加过程可能简单些;

处理l1 和 l2 共有元素的累加, 注意进位inc的累加;

处理多余的l1的内容;

处理多余的l2的内容;

处理最后剩余的进位;

 

3. 详细代码 3.1 直观的循环代码

1 /** 2 * Definition for singly-linked list. 3 * type ListNode struct { 4 * Val int 5 * Next *ListNode 6 * } 7 */ 8 9 func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { 10 var inc int 11 head := ListNode{0, nil} 12 lastNode := &head 13 for ; l1 != nil && l2 != nil; l1, l2 = l1.Next, l2.Next { 14 sum := l1.Val + l2.Val + inc 15 if sum >= 10 { 16 inc = 1 17 sum -= 10 18 } else { 19 inc = 0 20 } 21 temp := ListNode{sum, nil} 22 lastNode.Next = &temp 23 lastNode = &temp 24 } 25 for ; l1 != nil; l1 = l1.Next { 26 sum := l1.Val + inc 27 if sum >= 10 { 28 inc = 1 29 sum -= 10 30 } else { 31 inc = 0 32 } 33 temp := ListNode{sum, nil} 34 lastNode.Next = &temp 35 lastNode = &temp 36 } 37 for ; l2 != nil; l2 = l2.Next { 38 sum := l2.Val + inc 39 if sum >= 10 { 40 inc = 1 41 sum -= 10 42 } else { 43 inc = 0 44 } 45 temp := ListNode{sum, nil} 46 lastNode.Next = &temp 47 lastNode = &temp 48 } 49 if inc != 0 { 50 temp := ListNode{inc, nil} 51 lastNode.Next = &temp 52 lastNode = &temp 53 } 54 return head.Next 55 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjjz.html