2018-08-26

题目如下:
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

直接能够想到的就是把链表中的数组组成一个整数然后相加,但是对于较长的链表而言,整数范围是不够滴(leetcode上最后的例子数字已经超过了64位所能代表的最大整数,浮点数没有具体计算过),而且时间复杂度,应该是O(2(m+n)),取数一次操作,赋值又一次操作.所以这里考虑将每一个节点的值相加,然后赋值给新的链表,时间复杂度为O(max(m,n)),并且不会出现数值过大无法计算的情况.

代码如下

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {

    p1 := l1
    p2 := l2
    p1Next := p1
    p2Next := p2
    p3 := &ListNode{}
    p3Next := p3
    CF := 0

    for {

        if p1Next != nil || p2Next != nil || CF != 0{

            v1 :=0
            if(p1Next != nil){
                 v1= p1Next.Val
            }
            v2 := 0
            if(p2Next != nil){
                v2= p2Next.Val
            }

            val := v1 + v2 + CF
            if val >= 10 {
                p3Next.Val = val - 10
                CF = 1
            } else {
                p3Next.Val = val
                CF = 0
            }

            if p1Next != nil {
                p1Next = p1Next.Next
            }
            if p2Next != nil {
                p2Next = p2Next.Next
            }

            if(p1Next != nil || p2Next!= nil || CF!=0){
                p3Next.Next = &ListNode{}
                p3Next = p3Next.Next
            }
        }else{
            break
        }
    }
    return p3
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,362评论 0 12
  • 下雪的时候读读写下雪的诗,下雨的时候读读写下雨的文,春花开了写春花,秋月升起咏秋月,每一天都生活在语文的情趣中,想...
    王小唐阅读 259评论 0 2
  • 9月29日 星期五 今天时间怎么这么慢,期待着孩子回家。五天没有见到他了,确实挺想孩...
    我是龙泽阅读 160评论 0 0
  • 我村子的故事(4) 升入五年级,气氛似乎骤然就紧张了起来。 老师常说,要我们好好学习,努力考乡中。 我们村子很大,...
    戚老师说阅读 929评论 5 1

友情链接更多精彩内容