leetcode 题目21. 合并两个有序的链表

题目描述

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

示例:

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

分析

建立一个新的链表l3,遍历取较小值放在l3上,注意返回的头节点

代码

package main

/**
21. 合并两个有序链表
**/

func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
	l3 := &ListNode{}
	newHead := l3
	for l1 != nil && l2 != nil {
		if l1.Val < l2.Val {
			l3.Next, l1, l3 = l1, l1.Next, l1
		} else {
			l3.Next, l2, l3 = l2, l2.Next, l2
		}
	}
	if l1 == nil {
		l3.Next = l2
	} else if l2 == nil {
		l3.Next = l1
	}
	return newHead.Next
}