两个单链表并归


#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单链表的值: ");
 CreateList_L(L1,4);
// printf("L1的长度为:%d ",len_l(L1));
 printf("请输入L2单链表的值: ");
 CreateList_L(L2,3);
 printf("L1单链表的值为: ");
 list_printf(L1);
 printf(" ");
 printf("L2单链表的值为: ");
 list_printf(L2);
 printf(" ");
 printf("并归后的单链表为: ");
 add_L(L1,L2);
 list_printf(L1);
 printf(" ");
 
}

运行结果:

原文地址:https://www.cnblogs.com/wangliangliang/p/3207622.html