合并兩列已排序鏈表.
注意點(diǎn):
1.訪問前判斷是否為空。
代碼:
#include<iostream>
using namespace std;
structListNode {
?? ? ? ? intval;
?? ? ? ? ListNode*next;
?? ? ? ? ListNode(intx) :val(x),next(NULL) {}
?? ? };
ListNode* mergeTwoLists(ListNode* l1,ListNode* l2) {
? ? ListNode*head,*index;
? ? if(l1==NULL)
? ? ? ? returnl2;
? ? if(l2==NULL)
? ? ? ? returnl1;
? ? if(l1->val>l2->val)
? ? {
? ? ? ? head=l2;
? ? ? ? l2=l2->next;
? ? }
? ? else
? ? {
? ? ? ? head=l1;
? ? ? ? l1=l1->next;
? ? }
? ? index=head;
? ? while(l1!=NULL&& l2!=NULL)
? ? {
? ? ? ? if(l1->valval)
? ? ? ? {
? ? ? ? ? ? index->next=l1;
? ? ? ? ? ? index=index->next;
? ? ? ? ? ? l1=l1->next;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? index->next=l2;
? ? ? ? ? ? index=index->next;
? ? ? ? ? ? l2=l2->next;
? ? ? ? }
? ? }
? ? if(l1==NULL)
? ? ? ? index->next=l2;
? ? elseif(l2==NULL)
? ? ? ? index->next=l1;
? ? returnhead;
}
intmain(intargc,constchar* argv[]) {
? ? // insert code here...
? ? ListNode* p1,*p2,*p3,*q1,*q2,*q3;
? ? p1=newListNode(1);
? ? p2=newListNode(2);
? ? p3=newListNode(4);
? ? q1=newListNode(1);
? ? q2=newListNode(3);
? ? q3=newListNode(4);
? ? p1->next=p2;p2->next=p3;p3->next=NULL;
? ? q1->next=q2;q2->next=q3;q3->next=NULL;
? ? ListNode* result =mergeTwoLists(p1,q1);
? ? while(result!=NULL)
? ? {
? ? ? ? cout<val<<"->";
? ? ? ? result=result->next;
? ? }
? ? return 0;
}