您的位置:首页 > 职场人生

剑指offer之面试题17合并两个排序的链表

2016-05-11 10:18 417 查看
问题描述

输入两个递增的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。

实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct List{
int date;
struct List *next;
};

struct List* doMergeList(struct List *P1head,struct List *P2head){
if(P1head==NULL)
return P2head;
else if(P2head==NULL)
return P1head;
struct List *mergeHead = NULL;
if(P1head->date <P2head->date){
mergeHead = P1head;
mergeHead->next=doMergeList(P1head->next,P2head);
}else {
mergeHead=P2head;
mergeHead->next=doMergeList(P1head,P2head->next);
}
return mergeHead;
}
int main()
{
struct List *P1head=(struct List *)malloc(sizeof(struct List));
struct List *P2head=(struct List *)malloc(sizeof(struct List));
P1head->date=0;P1head->next=NULL;
P2head->date=1;
P2head->next=NULL;
int i;
struct List *P1Temp=P1head,*P2Temp=P2head;
for(i=1;i<4;i++){
P1Temp->next=(struct List *)malloc(sizeof(struct List));
P1Temp->next->date=i;
P1Temp->next->next=NULL;
P2Temp->next=(struct List *)malloc(sizeof(struct List));
P2Temp->next->date=i*3;
P2Temp->next->next=NULL;
P1Temp=P1Temp->next;
P2Temp=P2Temp->next;
}
P1Temp=P1head,P2Temp=P2head;
printf("this is first list:\t");
while(P1Temp!=NULL){
printf("%d\t",P1Temp->date);
P1Temp=P1Temp->next;
}
printf("\nthis is second list:\t");
while(P2Temp!=NULL){
printf("%d\t",P2Temp->date);
P2Temp=P2Temp->next;
}
printf("\nthis is merge list:\t");
struct List *Head = doMergeList(P1head,P2head);
while(Head!=NULL){
printf("%d\t",Head->date);
Head=Head->next;
}
printf("\ndomerge done!\n");
return 0;
}
参考资料

剑指offer

备注

转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51372134

作者:WSYW126
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer