给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:假设这些数位是正向存放的,请再做一遍。
示例:
输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912
解题思路
1,这个题目需要注意一个细节,进位标记
2,有与个位在前,所以比较简单
3,需要注意,两个链表的长短不一致
4,对于1+9999情况需要特殊处理
代码实现
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
if l1==nil{
return l2
}
if l2==nil{
return l1
}
r:=new(ListNode)
tr:=r
t1:=l1
t2:=l2
flag:=0
tr.Val=(t1.Val+t2.Val+flag)%10
flag=(t1.Val+t2.Val+flag)/10
for t1.Next!=nil && t2.Next!=nil{
tr.Next=new(ListNode)
tr=tr.Next
t1=t1.Next
t2=t2.Next
tr.Val=(t1.Val+t2.Val+flag)%10
flag=(t1.Val+t2.Val+flag)/10
}
for t1.Next!=nil{
tr.Next=new(ListNode)
tr=tr.Next
t1=t1.Next
tr.Val=(t1.Val+flag)%10
flag=(t1.Val+flag)/10
}
for t2.Next!=nil{
tr.Next=new(ListNode)
tr=tr.Next
t2=t2.Next
tr.Val=(t2.Val+flag)%10
flag=(t2.Val+flag)/10
}
if flag!=0{
tr.Next=new(ListNode)
tr=tr.Next
tr.Val=flag
}
return r
}
本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!