溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

鏈表表示數(shù)字相加 go語(yǔ)言版本

發(fā)布時(shí)間:2020-03-03 02:55:41 來(lái)源:網(wǎng)絡(luò) 閱讀:338 作者:雷頓學(xué)院 欄目:開發(fā)技術(shù)

鏈表表示數(shù)字相加 go語(yǔ)言版本


給定兩個(gè)非空鏈表來(lái)表示兩個(gè)非負(fù)整數(shù)。位數(shù)按照逆序方式存儲(chǔ),它們的每個(gè)節(jié)點(diǎn)只存儲(chǔ)單個(gè)數(shù)字。將兩數(shù)相加返回一個(gè)新的鏈表。你可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)字都不會(huì)以零開頭。

示例:

輸入:(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
}
//轉(zhuǎn)成字符串,數(shù)字?相加,再轉(zhuǎn)成鏈表
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
}

//?反轉(zhuǎn)鏈表,相加,注意進(jìn)位
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)
?
}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

go
AI