学习Go语言,准备使用LeetCode来熟悉Go语言的语法
准备题目
题目是leetCode的第二题
两数相加
自己捣鼓写来一版
思路就是每次遍历一个节点都相互加起来,然后进位+1就存着到下个节点去,下次再相加就是本身+两个节点相加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { var pli = new(ListNode) nli := pli for { if l1 != nil && l2 != nil { pli.Next = &ListNode{Val: (pli.Val + l1.Val + l2.Val) / 10} pli.Val = (pli.Val + l1.Val + l2.Val) % 10 l1 = l1.Next l2 = l2.Next if l1 != nil || l2 != nil { pli = pli.Next } } else if l1 == nil && l2 != nil { pli.Next = &ListNode{Val: (l2.Val + pli.Val) / 10} pli.Val = (pli.Val + l2.Val) % 10 l2 = l2.Next if l1 != nil || l2 != nil { pli = pli.Next } } else if l1 != nil && l2 == nil { pli.Next = &ListNode{Val: (l1.Val + pli.Val) / 10} pli.Val = (pli.Val + l1.Val) % 10 l1 = l1.Next if l1 != nil || l2 != nil { pli = pli.Next } } else if l1 == nil && l2 == nil { if pli.Next.Val == 0 { pli.Next = nil } break } } return nli }
|
编写代码中记录一些学习点:
初始化 struct,可以使用new,也可以使用字面量,new关键字是用来分配内存的函数,new(Type)作用是为T类型分配并清零一块内存,并将这块内存地址作为结果返回。也就是说new(T)会为类型为T的新项分配已置零的内存空间,并返回它的地址。
1 2 3 4
| ln := new(ListNode)
ln2 := &ListNode{Val: 1}
|
学习来类转换字符转数字使用strconv库
struct中首字母大写是可以暴露属性给外部使用
一个文件目录下只能有一个main方法
vscode中设置运行配置 指定来program指定目录则,运行该目录下的main方法
未待完续…
后面我看来别人的实现方式, 我有时间在优化一版。