合并俩个已排序的链表
2017-11-26 09:07
183 查看
非递归
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
ListNode* root=new ListNode(0);
ListNode* pre=root;
ListNode* p=l1;
ListNode* q=l2;
while(p && q){
if(p->val < q->val){
pre->next=p;
p=p->next;
}else{
pre->next=q;
q=q->next;
}
pre=pre->next;
}
/*
while(p){
pre->next=p;
pre=pre->next;
p=p->next;
}
while(q){
pre->next=q;
pre=pre->next;
q=q->next;
}*/
pre->next= p!=NULL ? p:q;
return root->next;
}
代码: 递归
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
if(l1->val < l2->val){
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}else{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
ListNode* root=new ListNode(0);
ListNode* pre=root;
ListNode* p=l1;
ListNode* q=l2;
while(p && q){
if(p->val < q->val){
pre->next=p;
p=p->next;
}else{
pre->next=q;
q=q->next;
}
pre=pre->next;
}
/*
while(p){
pre->next=p;
pre=pre->next;
p=p->next;
}
while(q){
pre->next=q;
pre=pre->next;
q=q->next;
}*/
pre->next= p!=NULL ? p:q;
return root->next;
}
代码: 递归
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
if(l1->val < l2->val){
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}else{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
相关文章推荐
- 合并俩个排序的链表
- 面试题17—合并两个排序的链表
- lintcode-合并两个排序链表
- 链表插入、链表相加、链表相乘、链表排序、链表合并等操作的java实现
- 【数据结构】单链表—合并两个排序链表 — 递归
- java 合并两个排序的链表
- 剑指offer面试题[17]-合并两个排序的链表
- 【剑指Offer面试题】 九度OJ1519:合并两个排序的链表
- 合并两个已排序的链表
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 合并两个排序的链表
- 九度_题目1519:合并两个排序的链表
- 《剑指offer》——合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序链表
- 链表——合并K个排序的链表
- 合并两个排序链表
- 合并两个排序链表
- lintcode合并两个排序链表
- 合并两个排序的链表