题目
- 两数相加 II
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7
解法
使用栈的方式来实现,容易理解,也容易实现,但是golang没有内置堆栈函数,所以这个题的解法在网上相对较少
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/func Reverse(head *ListNode)*ListNode{if head == nil{return head}var pre *ListNodecur := headfor cur !=nil{next := cur.Nextcur.Next = prepre = curcur = next}return pre
}func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {cur1 ,cur2 := Reverse(l1),Reverse(l2)ca :=0 //进位n,n1 ,n2:=0,0,0 //n 表示两数相加的和,n1表示l1的值,n2表示l2的值var pre *ListNode for cur1!= nil ||cur2!=nil{if cur1 == nil{n1 = 0}else{n1 = cur1.Val}if cur2 == nil{n2 =0}else {n2 = cur2.Val}n = n1+n2+canode := &ListNode{Val:n%10,Next :pre,}pre = nodeca = n/10if cur1!= nil&&cur1.Next != nil{cur1 = cur1.Next}else{cur1 =nil}if cur2!=nil&&cur2.Next != nil{cur2 = cur2.Next}else{cur2 =nil}}if ca==1{node1 := &ListNode{Val:1,Next :pre,}return node1}return pre}作者:he-qing-ping
链接:https://leetcode-cn.com/problems/add-two-numbers-ii/solution/go-yu-yan-shi-xian-by-he-qing-ping/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。