百度一面算法题-合并两个有序链表

本文介绍了一道百度面试算法题的解决方案,即合并并排序两个有序链表。通过Go语言实现,采用双层循环逐步比较和填充的方式完成合并过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:百度一面算法题-合并两个有序链表

题目:给定初始两个有序链表s1、s2,现需将s1和s2合并,并进行排序。

可使用Go中的切片来模拟链表实现相关功能,首先设s1 := []int{1, 3, 5, 7},s2 := []int{2, 4, 6, 8},合并排序后的s3 := []int{1, 2, 3, 4, 5, 6, 7, 8}。

来分析下实现上述代码的思路,首先将s1、s2的第一个元素取出进行比较,用第一个元素较小的切片做最外层的循环,另一个切片做最里层的循环。

循环过程中,第一层循环下直接将第一个元素较小的切片的元素填充进s3,第二层循环是为了查找比第一层循环中的当前元素的值大且比当前元素的下一个元素的值小的元素,将其填充进s3,如此循环,可处理掉s1、s2除最后一个元素外的所有元素,最后将其最后一个元素单独处理就可以了。

代码实现如下:

package main

import "fmt"

func main() {
	s1 := []int{1, 3, 5, 7}
	s2 := []int{2, 4, 6, 8}
	s3 := make([]int, 0)

	for i := 0; i < len(s1); i++ {
		if i+1 < len(s1) {
			s3 = append(s3, s1[i])
		}

		for j := 0; j < len(s2); j++ {
			if i+1 < len(s1) {
				if s2[j] > s1[i] && s2[j] < s1[i+1] {
					s3 = append(s3, s2[j])
				}
			}
		}
	}

	if s1[len(s1)-1] < s2[len(s2)-1] {
		s3 = append(s3, s1[len(s1)-1])
		s3 = append(s3, s2[len(s2)-1])
	} else {
		s3 = append(s3, s2[len(s2)-1])
		s3 = append(s3, s1[len(s1)-1])
	}

	fmt.Println(s3)
}


运行结果如下:

上述代码并不是最优解,只是当时脑子蒙圈的下意识的方案,还有其它更优秀的方案,欢迎各位批评指正。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值