题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例
示例 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 均按 非递减顺序 排列
解题思路
- 看到这道题我首先去学习了一下Go list的知识,go是有提供list标准库的
- 和本题有关系的非常重要的方法是
Next()
func (e *Element) Next() *Element {}会返回元素"e"的下一个元素。
- 因为题目中已经告诉我们,参数是2个升序的有序链表,瞬间就降低了解题难度
- 我的思路是这样:借助 Next()方法每次获得更小的那个元素,拼接到新的list中就可以了。
- 具体的解题代码,请查看下面的代码段,写了非常清晰的注释。
AC代码
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { //生成list var ret = new(ListNode) cur := ret //当l1和l2都不为空时循环遍历 for l1 != nil && l2 != nil { //如果l1<l2时 那么把cur.Next设置为l1 if l1.Val < l2.Val{ cur.Next = l1 l1 = l1.Next //否则 把cur.Next设置为l2 }else { cur.Next = l2 l2 = l2.Next } //我们的原则是 本次循环中小的值赋值给cur cur = cur.Next } //兼容到l1或者l2为空的情况 if l1 != nil { cur.Next = l1 } if l2 != nil { cur.Next = l2 } return ret.Next }
运行结果
总结
我们熟练掌握了Go语言的List之后,能更清晰的解答这道题。