博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两数相加(Go,LeetCode)
阅读量:4189 次
发布时间:2019-05-26

本文共 1675 字,大约阅读时间需要 5 分钟。

目录


 

题目描述

给出两个非空的(单向)链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示他们的和。您可以假设除数字0以外,这两个数都不会以0开头。

输入/输出示例

指定两个相加的整数 342, 465
得到的结果 [ 8, 0, 7]
解释

因为

2 + 5 = 7;

4 + 6 = 10, 进位后得0;

3 + 4 + 1(进位)= 8

 

解决方案

因为两个链表是单向链表,且是从个位数开始至最高位存储的每一个数字,因此依次对两个链表的每一位做加法即可。

在做加法的时候需要注意一点,如果两个数相加超过了9,必须向更高位进位,即高位+1。如果高位+1后继续大于9,重复进位,直至小于10。

需要考虑的一点是,两个数长度不相等的情况。如果一个链表遍历结束,则等待另一个链表全部遍历完后计算才可以结束。

 

代码

package maintype ListNode struct {	Val  int	Next *ListNode}func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {	head := &ListNode{Val: 0}	pre := head	sum := 0	for {		if l1 == nil && l2 == nil && sum == 0 {			break		}		value1 := 0		value2 := 0		if l1 != nil {			value1 = l1.Val		}		if l2 != nil {			value2 = l2.Val		}		sum += value1 + value2		pre.Next = &ListNode{Val: sum % 10}		pre = pre.Next		sum = sum / 10		if l1 != nil {			l1 = l1.Next		}		if l2 != nil {			l2 = l2.Next		}	}	return head.Next}

 

代码走读

 

package main// 链表节点type ListNode struct {   Val  int   Next *ListNode}func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {   // 定义一个新链表的表头和指针。新链表用来保存最终的计算结果   head := &ListNode{Val: 0}   pre := head    // 每一步求和的暂存变量   sum := 0   for {      if l1 == nil && l2 == nil && sum == 0 {         break      }      value1 := 0      value2 := 0      if l1 != nil {         value1 = l1.Val      }      if l2 != nil {         value2 = l2.Val      }      // 每一步的求和结果      sum += value1 + value2      // 创建新的节点,将sum值的个位作为新节点的值      pre.Next = &ListNode{Val: sum % 10}      pre = pre.Next      // 保留sum的十位数,作为进位数保留到下一步计算中      sum = sum / 10      if l1 != nil {         l1 = l1.Next      }      if l2 != nil {         l2 = l2.Next      }   }   return head.Next}

 

传送门

转载地址:http://mdsoi.baihongyu.com/

你可能感兴趣的文章
Windows NT/2000服务器优化
查看>>
Windows 2003系统优化技巧
查看>>
Linux NFS服务器性能优化
查看>>
FREEBSD升级及优化全攻略
查看>>
RISC架构服务器开源运动将促使市场需求提升
查看>>
IT治理的成功要诀
查看>>
中化CIO彭劲松:IT治理让我明明白白做事
查看>>
中国惠普公司企业计算及专业服务集团卫东:IT治理最重要就是保证技术与业务有效结合
查看>>
【MVP】 Wenzhong Huang 北大硕士,微软MVP,微软嵌入式讲师,MCSE
查看>>
解析ERP部署的三角模型
查看>>
百感交集:一个IT人应该如何面对失业?
查看>>
服装经营中关于直销、加盟、代理和联营的区别
查看>>
盯上好男人 服装业B2C暗战
查看>>
局域网内部管理行为应该如何控制?
查看>>
CIO--成,获得认可;败,危及部门生存
查看>>
ERP专家童継龙:ERP从神秘少女变成邻家小妹
查看>>
Palm之祭
查看>>
两种不同的Web应用
查看>>
.Net多线程总结(一)
查看>>
让 ASP.NET MVC 支持 HotSwap
查看>>