线性表的删除与合并(链表基础)

线性表的删除与合并(链表基础)


#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}LNode,*LinkList;
void CreateLink(LinkList *L,int cnt)
{
    int i;
    *L=(LinkList)malloc(sizeof(LNode));
    LinkList p=*L;
    p->next=NULL;
LinkList s;
for(i=0;i<cnt;i++)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(s->data));
p->next=s;
p=s;
}
p->next=NULL;
return ;
}
void del(LinkList *L1,LinkList *L2)   //头指针方便了链表的操作 用头的next表示下一元素,而不是取当前的data
{
LinkList p=*L1;                   //而且头是不会变的,稳定的开头,不包含数据,只有地址。
LinkList q=*L2;
    while(p->next&&q->next)
    {
    if(p->next->data<q->next->data)
    p=p->next;
    else if(p->next->data>q->next->data)    //必须if else结构 ,三个if绝对错
    q=q->next;
    else
    {
     p->next=p->next->next;
     q=q->next;
        }
    }                                         //p到没到头都不必在尾接NULL;
    LinkList head=*L1;
    while(head->next)
    {
        if(head->next->next==NULL)
        printf("%d\n",head->next->data);
        else
        printf("%d ",head->next->data);   //链表最后不输空格的方法
        head=head->next;
    }
return ;
}
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
LinkList pa,pb,pc;//只是在函数 强调指针形式,定义的时候还是正常的 
CreateLink(&pa,a);
CreateLink(&pb,b);
CreateLink(&pc,c);
LinkList mmm;
LinkList nnn;
    mmm=(LinkList)malloc(sizeof(LNode));
    nnn=mmm;
    LinkList qb=pb,qc=pc;
    while(qb->next&&qc->next)          //为什么是 while(qb->next&&qc->next) 画个带头链表图就知道了
{
 if(qb->next->data>qc->next->data)
 qc=qc->next;
 else if(qb->next->data<qc->next->data)
 qb=qb->next;
 else
{
  nnn->next=qb->next;
  nnn=qb->next;
  qb=qb->next;
  qc=qc->next;
}
    }
nnn->next=NULL;
del(&pa,&mmm);
return 0;
}

猜你喜欢

转载自blog.csdn.net/xigongdali/article/details/79558911