解法一:双指针拉链法
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
res := &ListNode{} // 结果链表虚拟头节点dummy
cur := res
p1, p2 := list1, list2
for p1 != nil && p2 != nil{
// 将值较小的的节点接到结果链表上
if p1.Val < p2.Val{
cur.Next = p1
p1 = p1.Next
}else{
cur.Next = p2
p2 = p2.Next
}
// 处理下一个节点
cur = cur.Next
}
if p1 == nil{ // p1遍历完了,后面直接接p2剩余部分
cur.Next = p2
}else if p2 == nil{ // 同理
cur.Next = p1
}
return res.Next // 虚拟节点的下一个才是头节点
}