题目
解决代码及点评
/************************************************************************/
/*
70. 有两个链表a和b。设结点中包含学号、姓名。
从a链表中删除与b链表中有相同学号的那些结点
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct student STU;
struct student
{
int num;
char name[10];
struct student * next;
};
STU * Init()
{
STU * p=(STU *)malloc(sizeof(STU));
if (p==NULL)
{
return NULL;
}
else
p->next=NULL;
return p;
}
void Insert(STU * head,int num,char * name)
{ STU * last=head;
if (last==NULL)
{
return;
}
while(last->next!=NULL)
last=last->next;
STU *p=(STU *)malloc(sizeof(STU));
if (p==NULL)
{
return;
}
else
{
p->num=num;
strcpy_s(p->name,name);
last->next=p;
p->next=NULL;
}
}
void DeleteNode(STU* pre,STU *cur)
{
pre->next=cur->next;
free(cur);
}
void printfNodes(STU *head)
{
STU *p=head->next;
while(p!=NULL)
{
printf("%5d",p->num);
p=p->next;
}
printf("\n");
}
void main()
{
STU * A=Init();
Insert(A,1,"abc");
Insert(A,2,"abc");
Insert(A,3,"abc");
Insert(A,4,"abc");
STU * B=Init();
Insert(B,5,"abc");
Insert(B,3,"abc");
Insert(B,6,"abc");
Insert(B,7,"abc");
printfNodes(A);
printfNodes(B);
STU *p1=A;
STU *p2=B;
p2=p2->next;
p1=p1->next;
STU *p=A;
while(p1!=NULL)
{ p2=B->next;
while(p2!=NULL)
{
if (p1->num==p2->num)
{
DeleteNode(p,p1);
p1=p->next;
break;;
}
p2=p2->next;
}
p1=p1->next;
p=p->next;
}
printfNodes(A);
system("pause");
}
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn