LeetCode21 ----------Merge Two Sorted Lists
将两个有序链表合并成一个有序链表。
这是当初学数据结构时一个非常重要的链表操作了。
思路很简单。
首先如果其中一个为空,返回另一个。
分别比较两个链表的元素,分为三种情况:
前两种分别是,将指针1向右移动或将指针2向右移动。
当两值相等时,要同时插入两个元素,并同时移动两个指针。
最后:
当某一指针指向空时,要将另一条链表的剩余部分插入到结果链表中。
这里也需要注意头指针,在LeetCode中返回的链表都是不带头结点的头指针
代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l2 == NULL)
return l1;
if (l1 == NULL)
return l2;
ListNode *head=new ListNode(0);
ListNode *r = head;
while (l1 && l2)
{
if (l1->val == l2->val)
{
ListNode*p1 = new ListNode(l1->val);
ListNode*p2 = new ListNode(l2->val);
r->next = p1;
r = p1;
r->next = p2;
r = p2;
l1 = l1->next;
l2 = l2->next;
}
else if (l1->val < l2->val)
{
ListNode*p1 = new ListNode(l1->val);
r->next = p1;
r = p1;
l1 = l1->next;
}
else
{
ListNode*p2 = new ListNode(l2->val);
r->next = p2;
r = p2;
l2 = l2->next;
}
}
if (!l1)
{
r->next = l2;
}
else
{
r->next = l1;
}
ListNode * p = head;
head = head->next;
delete p;
return head;
}
};