c语言问题,关于链表的,想知道正确的解题思路,有点难,请高手指点

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:58:41
题目是这样的
有两个链表a和b,设结点中包括学号和姓名,从a链表删除与b链表相同的学号那些结点,a链表是现有的,b链表键盘输入姓名和学号,是动态的。

我的思路是建立一个int a[100],然后在建立动态b链表是将每个学号放入a数组中,这就是要在a链表中要删除的学号,然后当a链表的学号==a数组是就删除这个结点。
我觉得做法有点复杂,有没有更简单的方法
只要b链表中存在的学号,a链表中若有这个学号都要删除。b链表可能有多个学号

我认为上面这位仁兄的方法就可以了.

while(b的根目录不为NULL)
{
用个head记住a的头;
while(head不等于空)
{
将a中的学号和b的根目录的学号比较
if(==)删除a中的相关信息; 将b的根目录设为下级目录;释放b的原来根目录; 再break,从这个while中跳出
else head指向下一个结点;
}

b表全输入完才进行删除呢?还是加一个节点,a那里就得比较,删除一次?

不需要那么复杂,以下是伪代码,你可以试着写程序
首先在接口函数中定义一个定位函数,也就是可以遍历整个a的节点的函数
//伪代码:
while(b的根目录不为NULL)
{
遍历a,
将a中的学号和b的根目录的学号比较
if(==)删除a中的相关信息; 将b的根目录设为下级目录;释放b的原来根目录;
else 返回错误信息;
}