#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0
typedef int ElemType,Status;
typedef struct LNod
{ ElemType data; struct LNod *next; }LNode,*LinkList; //创建单链表void CreateList_L(LinkList &L,int n){ int i; LinkList p,q; L=(LinkList)malloc(sizeof(LNode)); L->next = NULL; q=L; for (i=0;i<n;i++) { p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); q->next=p; q=p; } q->next=NULL;}//取出单链表中的某个元素
Status GetElem_L(LinkList L,int pos,ElemType &e){ LinkList p=L->next; int j=1; while (p && j<pos) { p=p->next; j++; } if(!p) { return 0; }else { e=p->data; } return e;}//往单链表中插入一个元素
Status ListInsert_L(LinkList &L,int pos,ElemType e){ LinkList q; LinkList p=L->next; int j=1; while (p&&j<pos-1) { p=p->next; j++; } if (!p) { return 0; } else { q=(LinkList)malloc(sizeof(LNode)); q->data=e; q->next=p->next; p->next=q; } return 1;} //并归 充分利用前面写好的函数 GetElem_L ListInsert_L //另外再实现 int LocatElemt(LinkList L,ElemType e)// 1 把L2的元素逐个取出来存在E中// 2 把E和L1的元素进行比较,看L1中有没E存在// 3 不存在,则把E插入到L1的后面//计算单链表的长度
int len_l(LinkList L){ LinkList p; p=L->next; int j=0; while (p) { j++; p=p->next; } return j;}//把e和L的元素进行比较,看L中有没e存在
int LocatElemt(LinkList L,ElemType e){ LinkList p=L->next; int Len=len_l(L); int j=1; while (j<=Len && p->data!=e) { j++; p=p->next; } if(!p) return 0; else return j; }//两个单链表进行并归
void add_L(LinkList L1,LinkList L2){ int L1len=len_l(L1); int L2len=len_l(L2); int j; ElemType e; for (j=1;j<=L2len;j++) { GetElem_L(L2,j,e); if (LocatElemt(L1,e)==0) { ListInsert_L(L1,++L1len,e); } }}//输出单链表
void list_printf(LinkList L){ LinkList p; p=L->next; while (p) { printf("%d ",p->data); p=p->next; }}void main()
{ LinkList L1,L2; printf("请输入L1单链表的值:\n"); CreateList_L(L1,4);// printf("L1的长度为:%d\n",len_l(L1)); printf("请输入L2单链表的值:\n"); CreateList_L(L2,3); printf("L1单链表的值为:\n"); list_printf(L1); printf("\n"); printf("L2单链表的值为:\n"); list_printf(L2); printf("\n"); printf("并归后的单链表为:\n"); add_L(L1,L2); list_printf(L1); printf("\n"); }
运行结果: