Day10两数相加

 

 法一:

解题思路:

新建一个链表存储两个链表相加的各位数之和,注意进位,由于链表是逆序,只要依次往右进位即可,进位数要用一个变量存储起来。

main函数:

func main{
    l1:=&ListNode{}
	node1:=l1
	node1.Val=3

	node2:=&ListNode{}
	node2.Val=4
	node1.Next=node2

	node3:=&ListNode{}
	node3.Val=4
	node2.Next=node3


	l2:=&ListNode{}
	h1:=l2
	h1.Val=5
	fmt.Println("l2值=%d",l2.Val)

	h2:=&ListNode{}
	h2.Val=7
	h1.Next=h2

	h3:=&ListNode{}
	h3.Val=8
	h2.Next=h3

	h4:=&ListNode{}
	h4.Val=1
	h3.Next=h4

	ans:=addTwoNumbers(l1,l2)
	for ans.Next!=nil{
		fmt.Println(ans.Val)
		ans=ans.Next
	}
	//fmt.Println(ans)
}

函数部分:

func addTwoNumbers(l1 *ListNode, l2 *ListNode) (head *ListNode) {
	//定义一个临时指针(可移动指针)
	var tail *ListNode
	//定义两个存放L1、L2链表结点的变量 进位值
	carry:=0
	n1,n2:=0,0
	//依次遍历l1,l2链表
	//链表不为空,则将链表头结点指针指向的值赋给n1,链表指针偏移到下一个结点
	if l1!=nil{
		n1=l1.Val
		l1=l1.Next
	}
	//跟l1同理
	if l2!=nil {
		n2=l2.Val
		l2=l2.Next
	}
	//将两个链表结点的值相加,再加上进位值
	sum:=n1+n2+carry
	//定义一个新链表,将加得的值存储到新链表
	if head==nil{
		head=&ListNode{Val:sum}
		tail=head
	}else{
		tail.Next=&ListNode{Val:sum}
		tail=tail.Next
	}
	if carry>0{
		tail.Next=&ListNode{Val:carry}
	}
	return
}

时间复杂度:O(max(m,n)),其中 mm 和 nn 分别为两个链表的长度。

空间复杂度(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值