445. 两数相加 II golang

题目

  1. 两数相加 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 *ListNode
    cur := head
    for cur !=nil{
        next := cur.Next
        cur.Next = pre
        pre = cur
        cur = 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+ca
        node := &ListNode{
            Val:n%10,
            Next :pre,
        }
        pre = node
        ca  = n/10
      if 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
发布了356 篇原创文章 · 获赞 247 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/104648486