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

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

#include
#include
typedef struct Node
{
    int Data;
    struct Node *next;
}LNode,*PLNode;
void CreateLink(PLNode *L,int n)
{
    int i;
    *L=(PLNode)malloc(sizeof(LNode));
    PLNode p=*L;
    p->next=NULL;
    PLNode s;
    for(i=0;iData));
        p->next=s;
        p=s;
    }
    p->next=NULL;
    return ;
}
void Del(PLNode *L1,PLNode *L2)   //头指针方便了链表的操作 用头的next表示下一元素,而不是取当前的data
{
    PLNode p=*L1;                   //而且头是不会变的,稳定的开头,不包含数据,只有地址。
    PLNode q=*L2;
    while(p->next&&q->next)
    {
        if(p->next->Datanext->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;
    return ;
}
void Print(PLNode L1)
{
    PLNode 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;
    }
}
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    PLNode pa,pb,pc;//只是在函数 强调指针形式,定义的时候还是正常的
    CreateLink(&pa,a);
    CreateLink(&pb,b);
    CreateLink(&pc,c);
    PLNode mmm;
    PLNode nnn;
    mmm=(PLNode)malloc(sizeof(LNode));
    nnn=mmm;
    PLNode 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->Datanext->Data)
      qb=qb->next;
      else
    {
       nnn->next=qb->next;
       nnn=qb->next;
       qb=qb->next;                   //用nnn来存储合并链表
       qc=qc->next;
    }
    }
    nnn->next=NULL;
    Del(&pa,&mmm);
    return 0;
}




你可能感兴趣的:(c++,链表,c++,noj)