【Question】
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->val和l2->val,一次插入到新建链表中
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
int i;
ListNode *temp,*p1,*p2,*p3,*l3;
if(l1==NULL && l2== NULL) return l1;
if(l1==NULL && l2!=NULL) return l2;
if(l1!=NULL && l2==NULL) return l1;
p1=l1;
p2=l2;
p3=(ListNode *)malloc(sizeof(ListNode));
if(p1->val<=p2->val)
{
p3->val=p1->val;
p1=p1->next;
}
else
{
p3->val=p2->val;
p2=p2->next;
}
p3->val=NULL;
p3->next=NULL;
l3=p3;
while(p1!=NULL && p2!=NULL)
{
temp=(ListNode *)malloc(sizeof(ListNode));
if(p1->val>p2->val)
{
temp->val=p2->val;
temp->next=p3->next;
p3->next=temp;
p3=temp;
p2=p2->next;
}
else
{
temp->val=p1->val;
temp->next=NULL;
p3->next=temp;
p3=temp;
p1=p1->next;
}
}
while(p1==NULL&& p2!=NULL)
{
temp=(ListNode *)malloc(sizeof(ListNode));
temp->val=p2->val;
temp->next=p3->next;
p3->next=temp;
p3=temp;
p2=p2->next;
}
while(p2==NULL&& p1!=NULL)
{
temp=(ListNode *)malloc(sizeof(ListNode));
temp->val=p1->val;
temp->next=p3->next;
p3->next=temp;
p3=temp;
p1=p1->next;
}
return l3;
}
JAVA
参考http://blog.youkuaiyun.com/lanxu_yy/article/details/11692677,语句简化后的
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head=new ListNode(0);
ListNode ptr=head;
while(l1 != null || l2 != null)
{
ListNode cur = new ListNode(0);
if(l1 == null){
cur = l2;
l2 = l2.next;
}
else if(l2 == null){
cur = l1;
l1 = l1.next;
}
else{
if(l1.val < l2.val){
cur = l1;
l1 = l1.next;
}
else{
cur = l2;
l2 = l2.next;
}
}
ptr.next = cur;
ptr = ptr.next;
}
return head.next;
}