LeetCode21 合并两个有序链表

60 阅读1分钟

leetcode.cn/problems/me… image.png

解法一:双指针拉链法

/**
 * 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 // 虚拟节点的下一个才是头节点
}