链表表示数字相加 go语言版本
admin
2023-01-21 07:43:34
0

链表表示数字相加 go语言版本


给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807

package main
import "fmt"
import "strconv"
import "reflect"
type ListNode struct {
    data int
    next *ListNode
}
//转成字符串,数字 相加,再转成链表
func AddTwoNum(l1 *ListNode, l2 *ListNode) *ListNode {
        l1Int,_ := strconv.Atoi(reverse(l1))
        l2Int,_ := strconv.Atoi(reverse(l2))
        l := l1Int + l2Int
        lStr := strconv.Itoa(l)
        fmt.Println(reflect.TypeOf(lStr))
        fmt.Println(lStr)
        var newList []*ListNode
        for _,v := range lStr {
        fmt.Println(string(v))
        n,_ := strconv.Atoi(string(v))
        node := &ListNode{data:n}
        newList = append(newList,node)
        }
        head := new(ListNode)
        tail := head
        for k,node := range newList {
        if k == len(newList)-1 {
        newList = append(newList,nil)
        }
        node.next = newList[k+1]
        tail.next = node
        tail = tail.next
        }
        return head
    }

func reverse(l *ListNode) string {
    var s string
    for l != nil {
    s += strconv.Itoa(l.data)
    l = l.next
    }
    return s
}

// 反转链表,相加,注意进位
func (l *ListNode)AddTwoNumLink(l1 *ListNode) *ListNode {
    //head := new(ListNode)
    var head *ListNode
    head = &ListNode{}
    newList := new(ListNode)
    newList = head
    var newNode *ListNode
    l = l.reverseLink()
    l1 = l1.reverseLink()
    data := 0
    carry := 0
    //fmt.Println(l,l1)
    for l != nil || l1 != nil {
        var data1,data2 int
        if l != nil {
            data1 = l.data
            l = l.next
        } else {
            data1 = 0
        }
        if l1 != nil {
            data2 = l1.data
            l1 = l1.next
        } else {
            data2 = 0
        }
        fmt.Println(data1,data2)
        data = (data1 + data2 + carry) % 10
        newNode = &ListNode{data:data}
        head.next = newNode
        carry = (data1 + data2 + carry) / 10
        head = head.next  
    }
    return newList.next.reverseLink()
}

func (l *ListNode)reverseLink() *ListNode {
    //pre := new(ListNode)
    var pre *ListNode
    next := new(ListNode)
    for l != nil {
        next = l.next
        //fmt.Println(l.next)
        l.next = pre
        pre = l
        l = next
    }
    l = pre
    return l
    //return pre
}

func (l *ListNode)readLink() {
    var result []int
    for l != nil {
    result = append(result,l.data)
    l = l.next
    }
    fmt.Println(result)
}

func main()  {
    node7 := &ListNode{data:7,next:nil}
    node6 := &ListNode{data:6,next:node7}
    node5 := &ListNode{data:5,next:node6}

    node4 := &ListNode{data:4,next: node5}

    node3 := &ListNode{data:3,next:nil}
    //node3 := &ListNode{data:3,next:nil}
    node2 := &ListNode{data:2,next:node3}
    node1 := &ListNode{data:1,next: node2}
    
    
    //x := AddTwoNum(node1,node4)
    node1.readLink()
    //node1.reverseLink().readLink()
    node1.AddTwoNumLink(node4).readLink()
    //fmt.Println(r)
 
}


相关内容

热门资讯

今年上半年全国城镇新增就业69... 今天(22日)上午,人力资源社会保障部举行新闻发布会。今年上半年,全国城镇新增就业695万人,同比持...
委内瑞拉强震遇难人数升至534... 当地时间21日,委内瑞拉全国代表大会主席豪尔赫·罗德里格斯通过社交媒体通报,该国6月24日两次强震造...
高考684分花3000元咨询进... 潮新闻客户端 青年特约评论员 曾耀湘图源:视觉中国近日,据齐鲁晚报报道,河北一名2018级考生,因“...
郑州2死2伤火灾系人为纵火 郑州市公安局金水分局对外发布案件通报。通报显示,6月19日21时,郑州市金水区宏明路与柳林路东南角宏...
29岁成都小伙旅行中改道广西救... 7月14日,自发赶往广西救灾的志愿者党鑫蕊,由于劳累过度导致心功能衰竭,在贵港市覃塘区不幸离世,年仅...
清理洗衣机下水管道的方法 清理洗衣机下水管道是一项必要的任务,如果不及时清理,管道内部容易积累污垢和细菌,从而影响洗衣机的使用...
澳外长宣称:中国要就军事建设做... 7月初,中国向太平洋公海海域成功发射一枚携载训练模拟弹头的潜射战略导弹。中方重申,此为例行军事训练活...
伊朗威胁打击海水淡化厂,到底有... 据路透社报道,伊朗7月21日对科威特一座海水淡化厂发动袭击,引发海湾地区担忧,随着该地区冲突升级,更...
美新版“空军一号”刚上岗就回炉... 【环球时报综合报道】美国《防务新闻》7月20日称,美国总统特朗普透露,新版总统专机“空军一号”将被送...
全自动卧式洗衣机清理方法 随着生活水平的不断提高,全自动卧式洗衣机已经成为了家庭生活中不可或缺的一部分。它的出现方便了我们日常...