2023-09-01
445. 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
解答
两个链表应该从各位想加,先将两个链表反转
构造一个头节点(不参与计算),定义一个进位变量,
循环条件,两个反转后的链表节点和进位变量有一个不是空的,那么我们给结果链表增加一个节点记录数值
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
a := singly(l1)
b := singly(l2)
c := &ListNode{}
res := c
jinwei := 0
for a != nil || b!=nil || jinwei != 0 {
c.Next = &ListNode{}
c = c.Next
if a != nil {
c.Val = a.Val
a = a.Next
}
if b != nil {
c.Val = c.Val + b.Val
b = b.Next
}
c.Val += jinwei
jinwei = c.Val/10
c.Val %= 10
}
return singly(res.Next)
}
func singly(head *ListNode) *ListNode {
var pre *ListNode
for head != nil {
head.Next,head,pre = pre, head.Next, head
}
return pre
}