面試雜題(八)合併兩個遞增連結串列
阿新 • • 發佈:2019-02-02
#include <iostream> typedef struct LinklistNode { int nData; struct LinklistNode *next; }Node; using namespace std; #define N 20 Node *mergeLinkList(Node *pHead1,Node *pHead2); Node* createLinkList(int *pData,int nLen); void printLinkList(Node *pHead); int main() { int nData1[N]; int nData2[N]; for(int i=0;i<N;i++) { nData1[i]=2*i+1; } for(int i=0;i<N;i++) { nData2[i]=2*i+2; } Node *pHead1=createLinkList(nData1,N); Node *pHead2=createLinkList(nData2,N); printLinkList(pHead1); printLinkList(pHead2); Node *pHeadNew=mergeLinkList(pHead1,pHead2); printLinkList(pHeadNew); getchar(); return 0; } Node* createLinkList(int *pData,int nLen) { if (pData==NULL||nLen<=0) { return NULL; } Node *pHead=new Node; Node *pTemp=pHead; for (int i=0;i<nLen;i++) { if (i==nLen-1) { pTemp->nData=pData[i]; pTemp->next=NULL; return pHead; } pTemp->nData=pData[i]; pTemp->next=new Node; pTemp=pTemp->next; } } void printLinkList(Node *pHead) { Node *pTemp=pHead; while(pTemp!=NULL) { cout<<pTemp->nData<<'\t'; pTemp=pTemp->next; } cout<<endl; } Node *mergeLinkList(Node *pHead1,Node *pHead2) { Node *pTemp1=pHead1; Node *pTemp2=pHead2; if (pTemp2==NULL||pTemp1==NULL) { if (pTemp1) { return pTemp1; } if (pTemp2) { return pTemp2; } return NULL; } Node *pHeadNew=NULL; if (pHead1->nData<=pHead2->nData) { pHeadNew=pHead1; pTemp1=pTemp1->next; } else { pHeadNew=pHead2; pTemp2=pTemp2->next; } Node *pTemp=pHeadNew; while(pTemp2!=NULL&&pTemp1!=NULL) { if (pTemp1->nData<=pTemp2->nData) { pTemp->next=pTemp1; pTemp1=pTemp1->next; pTemp=pTemp->next; } else { pTemp->next=pTemp2; pTemp2=pTemp2->next; pTemp=pTemp->next; } } if (pTemp1) { pTemp->next=pTemp1; } if (pTemp2) { pTemp->next=pTemp2; } return pHeadNew; }