题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4代码:
// 21. 合并两个有序链表.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include struct list{ int data; struct list *next;};//两个链表融合,插入排序函数void sort(struct list *l1,struct list *l2);//输出链表void output(struct list *head);//输入链表void input(struct list *head,int num); int main(){ int n; list *h1,*h2; //两个链表的头,下面四行初始化链表 h1=(struct list*)malloc(sizeof(struct list)); h2=(struct list*)malloc(sizeof(struct list)); h1->next=NULL; h2->next=NULL; //两个链表输入 printf("请输入第一个链表节点数:\n"); scanf("%d",&n); input(h1,n); printf("请输入第二个链表节点数:\n"); scanf("%d",&n); input(h2,n); //合并链表并排序 sort(h1,h2); //输出合并后的链表 output(h1);} void input(struct list *head,int num){ struct list *tmp; struct list *end; end=head; printf("请输入链表节点:\n"); for(int i=0;i!=num;i++) { tmp=(struct list *)malloc(sizeof(struct list)); scanf("%d",&tmp->data); end->next=tmp; tmp->next=NULL; end=tmp; }} void sort(struct list *l1,struct list *l2){ struct list *p1,*p2,*tmp; p1=l1; p2=l2->next; while(p1->next&&p2) { if(p1->next->data>p2->data) { tmp=p2->next; p2->next=p1->next; p1->next=p2; p2=tmp; } else p1=p1->next; } if(p2) p1->next=p2;} void output(struct list *head){ while(head->next) { printf(" %d ",head->next->data); head=head->next; }}