【简单】21. 合并两个有序链表(递归)
2023-12-13 13:07:16
看到简单题我重拳出击!
题目
21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
解题
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
if list1==nil{
return list2
} else if list2==nil{
return list1
}
var result,node *ListNode
if list1.Val <= list2.Val{
result = list1
list1 = list1.Next
} else {
result = list2
list2 = list2.Next
}
node = result
for{
if list1==nil || list2==nil{
break
}
if list1.Val <= list2.Val{
node.Next = list1
list1 = list1.Next
} else {
node.Next = list2
list2 = list2.Next
}
node = node.Next
}
if list2==nil{
node.Next = list1
} else {
node.Next = list2
}
return result
}
一如既往地墨迹,还差着呢
题解
方法一:迭代
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
dummy := &ListNode{}
currentNode := dummy
for list1!= nil && list2 != nil{
if list1.Val <= list2.Val{
currentNode.Next = list1
list1 = list1.Next
} else {
currentNode.Next = list2
list2 = list2.Next
}
currentNode = currentNode.Next
}
if list1 == nil{
currentNode.Next = list2
} else {
currentNode.Next = list1
}
return dummy.Next
}
方法二:递归
func mergeTwoLists(list1, list2 *ListNode) *ListNode {
if list1 == nil {
return list2 // 注:如果都为空则返回空
}
if list2 == nil {
return list1
}
if list1.Val < list2.Val {
list1.Next = mergeTwoLists(list1.Next, list2)
return list1
}
list2.Next = mergeTwoLists(list1, list2.Next)
return list2
}
作者:灵茶山艾府
链接:https://leetcode.cn/problems/merge-two-sorted-lists/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
长进
- 创建一个哨兵节点,到时候直接return哨兵节点地Next节点,简化很多代码量
- 不用单独处理头结点
- 不用判空
- 哨兵节点的创建:
dummy := &ListNode{}
- 判断没写到for循环单独写if,垃圾
- 递归法
文章来源:https://blog.csdn.net/Miller_6/article/details/134965856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!