Open yankewei opened 3 years ago
感觉也没什么说的,就是把链表的元素存到一个数组中,这样可以从数组的尾部向前遍历(栈),然后相加即可。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var s1 []int
var s2 []int
for l1 != nil || l2 != nil {
if l1 != nil {
s1 = append(s1, l1.Val)
l1 = l1.Next
}
if l2 != nil {
s2 = append(s2, l2.Val)
l2 = l2.Next
}
}
var next *ListNode
flag := 0
for len(s1) != 0 || len(s2) != 0 {
var val1 int
var val2 int
if len(s1) != 0 {
val1 = s1[len(s1)-1]
s1 = s1[:len(s1)-1]
}
if len(s2) != 0 {
val2 = s2[len(s2)-1]
s2 = s2[:len(s2)-1]
}
val := val1 + val2 + flag
if (val > 9) {
val -= 10
flag = 1
} else {
flag = 0
}
tNode := &ListNode{Val: val}
tNode.Next = next
next = tNode
}
if flag == 1 {
return &ListNode{Val: 1, Next: next}
} else {
return next
}
}
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。