#include<stdio.h>/*循环单链表合并操作,王红刚2009/06/23完成*/ #include<stdlib.h>/*程序只用作学习交流,如要转载请注明出处*/ #include <malloc.h> #define ERROR 0 #define OK 1 typedef char ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList;/*LinkList为结构指针类型,用来说明头指针变量*/ void initlinklist(LinkList *L)/*初始化单链表*/ { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } void Create(LinkList L)/*建立循环单链表*/ { Node *s,*r; char c; int flag=1; r=L; while(flag) { c=getchar(); if(c!='#') { s=(Node *)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; } else { flag=0; r->next=L; } } } void Print(LinkList L)//输出链表函数 { Node *p; p=L->next; while(p!=L) { printf("%c ",p->data); p=p->next; } } LinkList merge_1(LinkList LA,LinkList LB)//实现合并函数 { Node *p,*q; p=LA; q=LB; while(p->next!=LA)p=p->next; while(q->next!=LB)q=q->next; q->next=LA; p->next=LB->next; free(LB); return(LA); } void main() { LinkList LA,LB,LC; printf("建立单链表LA,请输入链表数据,以#结束!/n"); initlinklist(&LA); Create(LA); printf("刚才建立的单链表为:/n"); Print(LA); printf("/n建立单链表LB,请输入链表数据,以#结束!/n"); initlinklist(&LB); Create(LB); printf("刚才建立的单链表为:"); Print(LB); printf("/n合并LA和LB为:"); LC=merge_1(LA,LB); if(LC!=NULL) { Print(LC); } }