顺序表的删除
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node* next;
}Node,*ListNode;
//创造链表
void CreatList(ListNode Name,int n){
ListNode p=Name,q;
for(int i=0;i<n-1;i++)
{
q=(ListNode)malloc(sizeof(Node));
q->data=0;
p->next=q;
p=q;
}
p->next=NULL;
}
//比较链表 返回两个链表的相同元素的链表
Node* CompareList(ListNode a,ListNode b){
ListNode p=a;
ListNode q=b;
ListNode same=(ListNode)malloc(sizeof(Node));
ListNode temp=same;
temp->next = NULL;
while(p)
{
while(q)
{
if(p->data == q->data)
{
ListNode x=(ListNode)malloc(sizeof(Node));
x->data = p->data;
x->next=NULL;
temp->next=x;
temp=x;
break;
}
q=q->next;
}
p=p->next;
q=b;
}
return same;
}
int main()
{
int m,n,p;
scanf("%d %d %d",&m,&n,&p);
ListNode A=(ListNode)malloc(sizeof(Node));
ListNode B=(ListNode)malloc(sizeof(Node));
ListNode C=(ListNode)malloc(sizeof(Node));
CreatList(A,m);
CreatList(B,n);
CreatList(C,p);
ListNode a=A,b=B,c=C;
while(a)
{
scanf("%d",&a->data);
a=a->next;
}
while(b)
{
scanf("%d",&b->data);
b=b->next;
}
while(c)
{
scanf("%d",&c->data);
c=c->next;
}
ListNode same=CompareList(B,C);
ListNode pp=A;//ABC没有空结点
ListNode q=same->next;//same有一个空结点
ListNode answer=(ListNode)malloc(sizeof(Node));
answer->next=NULL;
ListNode tail=answer,xx;
while(pp)
{
while(q)
{
if(pp->data == q->data)
{
break;//如果成立,说明该元素重复,不为其申请空间
}
q=q->next;
}
if(!q)//q走完都没有发现一样的,说明不重复,为其分配空间
{
xx=(ListNode)malloc(sizeof(Node));
xx->data = pp->data;
xx->next=tail->next;
tail->next=xx;
tail=xx;
}
pp=pp->next;
q = same->next;
}
for(ListNode p =answer->next;p;p=p->next)
{
printf("%d ",p->data);
}
return 0;
}