单链表实现递增有序交集

#include <stdio.h>
#include <stdlib.h>
#define OK    1
typedef int status;
typedef int ElemType;
typedef struct Node{
      ElemType data;
      struct Node *next;

}LNode,*LinkList;
void creat(LinkList L);
void IntersectionList1(LinkList L);
void Insert(LinkList L,LinkList p);
status Sort(LinkList L);
//void Print(LinkList L);

int main() {
      LinkList La;
      La=(LinkList)malloc(sizeof(LNode));
      La->next=NULL;
      La->data=-1;
      creat(La);
      Sort(La);
      printf("交集为:\n");
      IntersectionList1(La);
      printf("\n");
      return 0;
}

//创建一个新的链表
void creat(LinkList L){
          int n1,n2;
          LinkList p,q;
          p=L;
          printf("请输入A集合元素的个数:\n");
          scanf("%d",&n1);
          printf("请输入A集合元素:\n");
          while(n1--) {
              q=(LinkList)malloc(sizeof(LNode));
              scanf("%d",&q->data);
              q->next=NULL;
              p->next=q;
              p=q;
          }
          getchar();
          printf("请输入B集合元素的个数:\n");
          scanf("%d",&n2);
          printf("请输入B集合元素:\n");
          while(n2--) {
              q=(LinkList)malloc(sizeof(LNode));
              scanf("%d",&q->data);
              q->next=NULL;
              p->next=q;
              p=q;
          }
}

//提取链表中的重复元素
void  IntersectionList1(LinkList L)
{
 LinkList p,q,s;
 p=L;
 q=L->next;
 while(q->next)
 {
  if(q->data==q->next->data)
  {
      printf("%d ",q->data);
   p->next=q->next;
   s=q;
   q=q->next;
   free(s);
  }
  else
  {
   p=p->next;
   q=q->next;
  }

 }
}

//升序排列
void Insert(LinkList L,LinkList p)
{
 LinkList s;
 s=L;
 while(s->next && s->next->data < p->data)
  s=s->next;
 p->next=s->next;
 s->next=p;
}

status Sort(LinkList L){
       LinkList s,r;
       s=L->next;
       L->next=NULL;
       while(s){
          r=s;
          s=s->next;
          r->next=NULL;
          Insert(L,r);
       }
       return OK;
}
/*void Print(LinkList L)
{
 LinkList p;
 p=L->next;
 printf("交集为:\n");
 while(p)
 {
  printf("%d ",p->data);
  p=p->next;
 }
 printf("\n");
}*/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值