链表表示数字相加 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)
 
}


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...