题目是将两条逆序的链表相加,输出一条新的链表例如:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
这道题主要需要注意:
1、两个链表不一样长的情况
2、一个链表为空的情况
3、两个链表都结束了但是有额外的进未
4、需要从头结点的下一个节点开始插入
具体代码如下(水平有限,只是能跑出来,没有进行性能优化):
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
p := l1
q := l2
var x int
var y int
var newNode = new(ListNode)
var result = new(ListNode)
result = newNode
carry := 0
for p != nil || q != nil {
if p != nil {
x = p.Val
} else {
x = 0
}
if q != nil {
y = q.Val
} else {
y = 0
}
sum := x + y + carry
carry = sum / 10
newNode.Next = new(ListNode)
newNode = newNode.Next
newNode.Val = sum % 10
if p != nil {
p = p.Next
}
if q != nil {
q = q.Next
}
}
if carry > 0 && newNode != nil {
newNode.Next = new(ListNode)
newNode = newNode.Next
newNode.Val = carry
}
return result.Next
}