#include
typedef struct node
{
int num;
struct node *next;
}*LINK,NODE;
/*
这个函数用来创建有重复节点的单链表,
简单起见,每个节点的num成员变量按照节创建先后顺序付值,依次为
1,2,3...
第一个int n参数是要创建的总结点个数
第二个参数n1是第几个哪个节点与前面的节点的num成员变量相同
例如调用link_cr(5,2),则产生的节点如下:
NODE 1 num 1
NODE 2 num 2
NODE 3 num 2
NODE 4 num 4
NODE 5 num 5
*/
LINK link_cr(int n,int n1);
void link_show(LINK head);
LINK link_del(LINK head);
int main()
{
LINK head;
head=link_cr(5,2);
link_show(head);
head=link_del(head);
printf("After delete!\n");
link_show(head);
getchar();
}
void link_show(LINK head)
{
LINK p1=head;
while(p1!=NULL)
{
printf("NODE:%d Address:%ld \n",p1->num,&(*p1->next));
p1=p1->next;
}
}
LINK link_cr(int n,int n1)
{
LINK p1,head,p2;
int i;
p1=p2=head=(LINK)malloc(sizeof(NODE));
p1->num=1;
for(i=2;i<=n;i++)
{
p1=(LINK)malloc(sizeof(NODE));
p1->num=i;
if(i==n1) p1->num--;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return head;
}
LINK link_del(LINK head)
{
LINK p1=head,p2,p3;
int number;
while(p1!=NULL)
{
p2=p1->next;
number=p1->num;
p3=p1;
while(p2!=NULL)
{
if(p2->num==number)
{
p3->next=p2->next;
break;
}
p3=p2;
p2=p2->next;
}
p1=p1->next;
}
return head;
}
删除重复的链表 c语言实现
Leave a reply