2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
本着节约空间的态度,在不制造创造新链表的基础上在原链表l1上进行修改:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var flag int
tmp1 := l1
for {
if flag == 0 {
tmp1.Val += l2.Val
} else {
tmp1.Val = tmp1.Val + l2.Val + 1
}
if tmp1.Val >= 10 {
tmp1.Val = tmp1.Val % 10;
flag = 1
} else {
flag = 0
}
if tmp1.Next == nil || l2.Next == nil {
break
}
tmp1 = tmp1.Next
l2 = l2.Next
}
if tmp1.Next == nil && l2.Next == nil{
if flag > 0 {
tmp1.Next = &ListNode{Val:1,Next:nil}
}
} else if tmp1.Next == nil {
tmp1.Next = l2.Next
tmp1 = tmp1.Next
l2.Next = nil
for flag == 1 {
tmp1.Val += 1
if tmp1.Val >= 10 {
tmp1.Val = tmp1.Val % 10;
} else {
flag = 0
}
if tmp1.Next == nil && flag == 1 {
node := &ListNode{Val:1,Next:nil}
tmp1.Next = node
break
}
tmp1 = tmp1.Next
}
} else {
tmp1 = tmp1.Next
for flag == 1 {
tmp1.Val += 1
if tmp1.Val >= 10 {
tmp1.Val = tmp1.Val % 10;
} else {
flag = 0
}
if tmp1.Next == nil && flag == 1{
node := &ListNode{Val:1,Next:nil}
tmp1.Next = node
break
}
tmp1 = tmp1.Next
}
}
return l1
}