LeetCode 第 21 题 (Merge Two Sorted Lists)
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个排好序的链表,要求合并之后的链表仍然是排好序的。题目的要求给的并不明确,没有说合并之后的链表需要排好序的。但是出题人的意图确实是这样的。
这个题目比较简单,技巧呢仍然是提前建立一个头节点。这样能简化代码。
程序里同时维护着三个指针, l1、l2、和 p。l1、l2 用来遍历输入的两个链表。并依次将较小的元素插入到 p 这个链表中。具体的代码如下。
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
ListNode head(0), *p = &head;
while(l1 && l2)
{
if(l1->val <= l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if(l1 == NULL) p->next = l2;
if(l2 == NULL) p->next = l1;
return head.next;
}