跟着算法学GO(9)

173 阅读3分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

大年初四啦,晚上八点大家就可以看冬奥会的开幕式了,我想去鸟巢现场看(但是我没有钱),话说朱广权老师已经不配拥有真人手语老师了嘛,只能让人工智能和他配合了嘛,真是难为了以前的手语老师了!

image.png

废话不多说,上货

在这里插入图片描述

LeetcCode-21

21. 合并两个有序链表

题目如下:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例图如下

image.png

示例 2:

输入: l1 = [], l2 = []
输出: []

示例 3:

输入: l1 = [], l2 = [0]
输出: [0]

算法实现思路

这是一道简单难度的题,不是很难,主要考察的是对于链表结构的熟悉程度。

为两个链表都是升序链表,我们只需要采用一个指针遍历即可,当指针到达了一个链表的结尾,另一个链表未到达结尾,就意味着另一个链表的剩余数据均大于走到结尾链表的数据。

go实现算法


  type ListNode struct {
      Val int
      Next *ListNode
  }

func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {

	list := &ListNode{}
	pre := list

	for list1 != nil || list2 != nil {
		if list1 != nil && list2 != nil {
			if list1.Val > list2.Val {
				pre.Next = list2
				list2 = list2.Next
			} else {
				pre.Next = list1
				list1 = list1.Next
			}
			pre = pre.Next
		} else {
			pre.Next = If(list1 == nil, list2, list1)
			break
		}
	}
	return list.Next
}


//仿写三元运算符
func If(condition bool, trueVal, falseVal *ListNode) *ListNode {
	if condition {
		return trueVal
	} else {
		return falseVal
	}
}

image.png

进步越来越明显了嗷,虽然只是一道简单难度,但也是可以小小的骄傲一下滴

go结构体的创建

上面的算法实现可以看到,链表结构的实现是手动实现的,因为go中没有内置链表对象,但其实在go中不叫对象,叫结构体。

go中定义结构体也是较为简单的,结构体定义需要使用 type 和 struct 关键字。

type设定了结构体的名称
struct 语句定义一个新的数据类型

结构体中可以有多个成员变量或是结构体,统称成员,结构体的格式如下。

type name  struct {
   member1  type
   member2  type
   ...
   memberN  type
}

算法中实现了一个链表的结构体

 type ListNode struct {
  Val int   //值
  Next *ListNode  //链接的下一个节点,指针地址形式
  }

go结构体的声明

这里就说说常用的三种声明结构体的方式

第一种方式是使用T{}方式,这种方式声明的结果为值类型,仍以结构体ListNode为例,声明方式入下

stucname:= ListNode{}

第二种方式是使用内置函数new(),这种方式声明的结果为指针类型,声明方式入下

stucname:= new(ListNode)

第三种就是算法实现中使用的&方式,结果为指针类型

stucname:= &ListNode{}

第一种和第三种方式均支持初始化,初始化方式如下

stucname := &ListNode{1,LiotNode2}
stucname := ListNode{1,LiotNode2}

仍然一种是值类型,一种是指针类型

关于go没有三元运算符这件事

有写兄弟已经发现,我在算法的实现中仿写了三元运算符,为什么要仿写呢,因为go不支持三元运算符,仍和没有整数型Math.max()一样,开发者认为这些的实现很简单,自己实现就可以了,不要影响go的简洁性

我不理解,我是真的不理解……

你以为结束了

小问题:又要搞一个新的题了,惊不惊喜,意不意外,就这个吧 1114. 按序打印,是不是跳跃有点大,但是问题不大

下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述