將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是經過拼接給定的兩個鏈表的全部節點組成的。 函數
示例:spa
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4code
// 21. 合併兩個有序鏈表.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include<stdio.h> #include<stdlib.h> 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; } }