LeeCode from 0

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.

Example:

Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
解题思路:
1)判断两个链表是否为空,返回相对应的值;
2)若两个链表都不为空,首先比较两个链表第一个链节中数据的大小,将小的一方赋给新定义的链表;
3)若此时新链表指针指向l1的第三个节点,而L2的第二个节点还未加入新链表,则比较l1的第三个节点与l2的第二个节点的大小,将小的一方填入新的链表,大的一方则继续另一个链表的下一个节点的数据进行对比,直到其中一个链表指针为空。
代码如下:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head=NULL;
ListNode* p1;
ListNode* p2;
ListNode* p;
p1=l1;
p2=l2;
if(l1==NULL && l2==NULL)
return NULL;
else if(l1==NULL)
return l2;
else if(l2==NULL)
return l1;
else{
p1=l1;
p2=l2;
if(l1->val<=l2->val)
{
head=l1;
p1=p1->next;
}
else
{
head=l2;
p2=p2->next;
}
p=head;
while(p1!=NULL && p2!=NULL)
{
if(p1->val<=p2->val)
{
p->next=p1;
p1=p1->next;
p=p->next;
}
else
{
p->next=p2;
p2=p2->next;
p=p->next;
}
}
if(p1==NULL && p2==NULL)
return head;
else if(p1!=NULL && p2==NULL)
p->next=p1;
else
p->next=p2;
return head;
}

}
};

posted @ 2018-06-12 22:45  ssml  阅读(269)  评论(0编辑  收藏  举报