前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang刷leetcode 技巧(25)链表求和

golang刷leetcode 技巧(25)链表求和

作者头像
golangLeetcode
发布2022-08-02 18:43:22
2660
发布2022-08-02 18:43:22
举报
文章被收录于专栏:golang算法架构leetcode技术php

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295

输出:2 -> 1 -> 9,即912

进阶:假设这些数位是正向存放的,请再做一遍。

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295

输出:9 -> 1 -> 2,即912

解题思路

1,这个题目需要注意一个细节,进位标记

2,有与个位在前,所以比较简单

3,需要注意,两个链表的长短不一致

4,对于1+9999情况需要特殊处理

代码实现

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  if l1==nil{
      return l2
  }
  if l2==nil{
      return l1
  }
  r:=new(ListNode)
  tr:=r
  t1:=l1
  t2:=l2
  flag:=0

  tr.Val=(t1.Val+t2.Val+flag)%10
  flag=(t1.Val+t2.Val+flag)/10
  for t1.Next!=nil && t2.Next!=nil{
      tr.Next=new(ListNode)
      tr=tr.Next
      t1=t1.Next
      t2=t2.Next

        tr.Val=(t1.Val+t2.Val+flag)%10
        flag=(t1.Val+t2.Val+flag)/10      
  }

  for t1.Next!=nil{
            tr.Next=new(ListNode)
      tr=tr.Next
      t1=t1.Next
      tr.Val=(t1.Val+flag)%10
      flag=(t1.Val+flag)/10   
  }

  for t2.Next!=nil{
      tr.Next=new(ListNode)
      tr=tr.Next
      t2=t2.Next
       tr.Val=(t2.Val+flag)%10
        flag=(t2.Val+flag)/10   
  }

  if flag!=0{
            tr.Next=new(ListNode)
      tr=tr.Next
      tr.Val=flag
  }

return r
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档