面试杂题(八)合并两个递增链表

来源:互联网 发布:显卡金手指软件 编辑:程序博客网 时间:2024/05/16 02:08
#include <iostream>typedef struct LinklistNode {int nData;struct LinklistNode *next;}Node;using namespace std;#define N 20Node *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;}

0 0
原创粉丝点击