已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。(C语言)基础版

  • Post author:
  • Post category:其他


输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出

NULL

#include<stdio.h>

#include<stdlib.h>

typedef int ElementType;

typedef struct Node *PtrToNode;

struct Node{


ElementType data;

PtrToNode next;

};

typedef PtrToNode List;

List InitList(){                  //初始化单链表

List L;

L=(List)malloc(sizeof(struct Node));

L->next=NULL;

return L;

};

void GreateFromTail(List L){          //尾插法输入链表

PtrToNode r,s;

int a;

int flag=1;

r=L;

while(flag){


scanf(“%d”,&a);

if(a!=-1){


s=(List)malloc(sizeof(struct Node));

s->data=a;

r->next=s;

r=s;

}

else{


flag=0;

r->next=NULL;

// printf(“\n”);

}

}

};

int main(){


List S1=InitList();

List S2=InitList();

List S3=InitList();

PtrToNode p,q,r,s;

GreateFromTail(S1);

GreateFromTail(S2);

if(S1->next==NULL||S2->next==NULL){printf(“NULL”);return 0;}

s=(List)malloc(sizeof(struct Node));

p=S1;

q=S2;

r=S3;

while(p->next!=NULL){


if(p->next->data>q->next->data){


q=q->next;

}

else if(p->next->data==q->next->data){


s=(List)malloc(sizeof(struct Node));

s->data=p->next->data;

r->next=s;

r=r->next;

q=q->next;

p=p->next;

}

else p=p->next;

}

if(S3->next==NULL)printf(“NULL”);

else {


for(p=S3;p->next!=NULL;p=p->next){


if(p->next->next!=NULL)printf(“%d “,p->next->data);

else printf(“%d”,p->next->data);

}

}

return 0;

}



版权声明:本文为Kappuccino原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。