23.合并两个排序的链表

来源:互联网 发布:cnki翻译助手软件下载 编辑:程序博客网 时间:2024/05/17 06:37
题意:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

(hint: 请务必使用链表。)

分析:使用递归实现,考虑问题要全面,就是为NULL时候的处理。

代码实现:

#include<stdio.h>#include<stdlib.h>typedef struct node{struct node *next;int value;}Node;Node *Merge(Node *h1, Node *h2){if(h1 == NULL)return h2;else if(h2 == NULL)return h1;Node *mergeHead = NULL;if(h1->value < h2->value){mergeHead = h1;mergeHead->next = Merge(h1->next, h2);}else{mergeHead = h2;mergeHead->next = Merge(h1, h2->next);}return mergeHead;}void printList(Node *h){Node *p = h;while(p){if(p == h)printf("%d",p->value);else    printf(" %d",p->value);p = p->next;}printf("\n");}int main(){Node *h1, *h2, *h, *p, *temp;int len1, len2, i, value;while(scanf("%d%d",&len1, &len2) != EOF){h1 = NULL;h2 = NULL;for(i=0; i<len1; ++i){scanf("%d",&value);if(h1 == NULL){h1 = (Node *)malloc(sizeof(Node));h1->value = value;h1->next = NULL;p = h1;continue;}temp = (Node *)malloc(sizeof(Node));temp->next = NULL;temp->value = value;p->next = temp;p = temp;}for(i=0; i<len2; ++i){scanf("%d",&value);if(h2 == NULL){h2 = (Node *)malloc(sizeof(Node));h2->value = value;h2->next = NULL;p = h2;continue;}temp = (Node *)malloc(sizeof(Node));temp->next = NULL;temp->value = value;p->next = temp;p = temp;}h = Merge(h1, h2);if(h == NULL){printf("NULL\n");continue;}printList(h);}return 0;}


0 0