合并两个有序链表

来源:互联网 发布:sql删除表里面的数据 编辑:程序博客网 时间:2024/05/16 07:02
分两种:1、申请额外空间;2、不申请额外空间
<span style="font-size:18px;">#include <iostream>#include <string>#include <algorithm>#include <stack>#include <queue>#include <time.h>using namespace std;struct node{int data;node *next;};void create(node *&head){node *p1=NULL,*p2=NULL;int data;cin>>data;if(data==-1){return;}while(data!=-1){if(head==NULL){head=new node;head->data=data;p1=head;}else{p2=new node;p2->data=data;p1->next=p2;p1=p2;}cin>>data;}if(p1!=NULL)p1->next=NULL;}void print(node *T){if(T==NULL)return;while(T){cout<<T->data<<endl;T=T->next;}}void merge1(node *head1,node *head2,node *&head){node *p1=NULL,*p2=NULL;while(head1 && head2){if(head1->data<head2->data){if(head==NULL){head=new node;head->data=head1->data;p1=head;}else{p2=new node ;p2->data=head1->data;p1->next=p2;p1=p2;}head1=head1->next;}else{if(head==NULL){head=new node;head->data=head2->data;p1=head;}else{p2=new node ;p2->data=head2->data;p1->next=p2;p1=p2;}head2=head2->next;}}while(head1){if(head==NULL){head=new node;head->data=head1->data;p1=head;}else{p2=new node ;p2->data=head1->data;p1->next=p2;p1=p2;}head1=head1->next;}while(head2){if(head==NULL){head=new node;head->data=head2->data;p1=head;}else{p2=new node ;p2->data=head2->data;p1->next=p2;p1=p2;}head2=head2->next;}if(p1==NULL)return;elsep1->next=NULL;}node* merge2(node *head1,node *head2) {node *head=NULL;if(head1==NULL)return head2;if(head2==NULL)return head1;if(head1->data<head2->data){head=head1;head->next=merge2(head1->next,head2);}else{head=head2;head->next=merge2(head1,head2->next);}return head;}void main(){node *head1=NULL,*head2=NULL,*head=NULL;create(head1);//print(head1);create(head2);cout<<"-------------------"<<endl;merge1(head1,head2,head);//head=merge2(head1,head2);print(head); }</span>

0 0