归并链表(简单方法)
Posted nnyst
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并链表(简单方法)相关的知识,希望对你有一定的参考价值。
/* 问题描述:A和B是两个单链表(带头结点) 其中元素递增有序,设计一个算法,将A,B归并成一个按元素值非递减有序的链表C C由A,B中的结点构成 */ #include<stdio.h> #include<malloc.h> typedef struct LNode int data; struct LNode* next; LNode,*LinkList; //头插法构建单链表(输出时与创建顺序相反) void init1(LinkList &L) //一定要给L动态开辟空间,并且让 L->next = NULL; L = (LinkList)malloc(sizeof(LinkList)); L->next = NULL; LinkList s; int x; scanf("%d",&x); while(x!=-1) s = (LinkList)malloc(sizeof(LinkList)); s->data = x; s->next = L->next; L->next = s; scanf("%d",&x); //尾插法构建单链表 void init2(LinkList &L) L = (LinkList)malloc(sizeof(LinkList)); L->next = NULL; LinkList s,r; r = L; int x; scanf("%d",&x); while(x!=-1) s = (LinkList)malloc(sizeof(LinkList)); s->data = x; r->next = s; r = s; scanf("%d",&x); s->next = NULL; void merge(LinkList a,LinkList b,LinkList &c) LinkList p,q,s,r; p = a->next; q = b->next; c = (LinkList)malloc(sizeof(LinkList)); c->next = NULL; r = c; while(p!=NULL&&q!=NULL) s = (LinkList)malloc(sizeof(LinkList)); if(p->data<q->data) s->data = p->data; printf("=========%d\n",s->data ); r->next = s; r = s; //只动一个指针,切记 p = p->next; else s->data = q->data; printf("++++++++++%d\n",s->data ); r->next = s; r = s; //只动一个指针,切记 q = q->next; if(p!=NULL) s = (LinkList)malloc(sizeof(LinkList)); s->data = p->data; r->next = s; r = s; //只动一个指针,切记 p = p->next; else s = (LinkList)malloc(sizeof(LinkList)); s->data = q->data; r->next = s; r = s; //只动一个指针,切记 q = q->next; r->next=NULL; //输出链表中的元素 void show(LinkList L) LinkList p = L->next; while(p) printf("%d ",p->data); p = p->next; int main() // LinkList L; //// //头插法测试 //// init1(L); //// //尾插法插法测试 //// init2(L); // // show(L); LinkList a,b,c; printf("请输入链表a的元素:"); init2(a); printf("\n"); printf("请输入链表b的元素:"); init2(b); printf("\n"); merge(a,b,c); show(c); return 0;
以上是关于归并链表(简单方法)的主要内容,如果未能解决你的问题,请参考以下文章