21. Merge Two Sorted Lists

3 篇文章 0 订阅

题目描述:

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

示例 1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VfjZ6Ct-1686493063120)(…/…/…/images/Pasted%20image%2020230611221617.png)]


输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

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

Go

/**  
 * @author  simple * @date  2023/6/11 21:23 * @version 1.0 * 虽然在leetcode上没有通过, 但是我觉得没什么问题  
 */  
package main  
  
type ListNode struct {  
   Val  int  
   Next *ListNode  
}  
  
var head *ListNode = new(ListNode)  
  
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {  
   if list1 == nil {  
      return list2  
   }  
   if list2 == nil {  
      return list1  
   }  
   for list1 != nil && list2 != nil {  
      if list1.Val < list2.Val {  
         addNode(head, list1.Val)  
         list1 = list1.Next  
      } else {  
         addNode(head, list2.Val)  
         list2 = list2.Next  
      }  
   }  
   if list1 != nil {  
      addNode(head, list1.Val)  
   }  
   if list2 != nil {  
      addNode(head, list2.Val)  
   }  
   return head.Next  
}  
  
func addNode(t *ListNode, v int) int {  
   if head == nil {  
      t = &ListNode{  
         v,  
         nil}  
      head = t  
      println("nil head")  
      return 0  
  
   }  
   // 如果当前节点下一个节点为空  
   if t.Next == nil {  
      //t.Next指向下一个节点  
      t.Next = &ListNode{  
         v,  
         nil}  
      return -2  
   }  
   // 如果当前节点下一个节点不为空  
   return addNode(t.Next, v)  
}  
  
func main() {  
  
   list1Head := new(ListNode)  
   addNode(list1Head, 2)  
   list2Head := new(ListNode)  
   addNode(list2Head, 1)  
   lists := mergeTwoLists(list1Head.Next, list2Head.Next)  
   for lists != nil {  
      println(lists.Val)  
      lists = lists.Next  
   }  
  
}

func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
	if l1 == nil {
		return l2
	}
	if l2 == nil {
		return l1
	}
	if l1.Val < l2.Val {
		l1.Next = mergeTwoLists(l1.Next, l2)
		return l1
	}
	l2.Next = mergeTwoLists(l1, l2.Next)
	return l2
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值