| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 427 人关注过本帖
标题:链表删除
只看楼主 加入收藏
t1melost
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2010-12-6
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:3 
链表删除
要求:有两个链表A,B,设结点包含学号,姓名;从A链表中删除与B链表中有相同学号的那些结点。

#include <stdio.h>
#define null 0


struct stu
{
 int num;
 char name[20];
 struct stu *next;
};
int n=0;

struct stu *creat(void)                                                     \\\\\建立链表
{
 struct stu *p1,*p2,*head;
 int i;
 p1=p2=(struct stu*)malloc(sizeof(struct stu));

 printf("\ntha data:\n");
 printf("input num and name:\n");
 scanf("%d,%s",&p2->num,p2->name);

 while(p1->num!=0)
 {
  n=n+1;
  if(n==1)head=p1;
  else p2->next=p1;
  p2=p1;
  p1=(struct stu *) malloc(sizeof(struct stu));
  scanf("%d,%s",&p1->num,p1->name);
 }
 p2->next=null;
 return(head);
}


struct stu *del(struct stu *head1,struct stu* head)                             \\\\\\删除结点,我试了,这个函数有问题,但是找了很久没发现问题所在。
{
 struct stu *p1,*p2,*p3;
 int count=0;

 p1=p3=head1;
 p2=head;

 while(count!=1)
 {
  if(p1->num==p2->num)
  {
   if(p1==head1)
    head1=p1->next;
   else if(p1->next==null)
    p1->next=null;
   else
    p3->next=p1->next;
  }
   p3=p1;
   p1=p1->next;

   if(p1->next==null)
   { p1=head1;
   p2=p2->next;
   }
   if(p2->next=null)
   count=1;

 }
 p3->next=null;
 return(head1);
}

void print(struct stu *head1)                                      /////打印链表
{
 struct stu *p1;
 p1=head1;
 printf("\nthe new data:\n");
 do
 {
   printf("num:%d    name:%s\n",p1->num,p1->name);
   p1=p1->next;
 }
 while(p1!=null);
}

void main()
{
 struct stu *head1,*head;
 head1=creat();
 head=creat();
 head1=del(head1,head);
 print(head1);
}
搜索更多相关主题的帖子: null 姓名 
2011-04-06 10:14
给力芬2010
Rank: 2
等 级:论坛游民
帖 子:48
专家分:71
注 册:2011-3-17
收藏
得分:0 
删除结点的函数内没有n=n+1,结点怎么向下循环啊;
还有就是你定义的结构体好像没有命名,这样能运行吗???
2011-04-06 10:32
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
链表类_C语言.rar (1.71 KB)

懒得看了 给你个参考  所有链表的操作

                                         
===========深入<----------------->浅出============
2011-04-06 10:49
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:20 
else if(p1->next==null)p1->next=null;这句应该是删除末结点,应该是让p1前一个结点的next指针指向NULL;应该写成p3->next=NULL;free(p1);还有就是将else后面加上花括号,删除结构体的指针都用free()函数,可以释放之前申请的内存。
还有将p3=p1;p1=p1->next;放在最后,不然每次都会把尾结点忽略了。p2=p2->next也是该放在最后的,不如用p2!=NULL做循环条件

我的地盘
2011-04-06 11:12
快速回复:链表删除
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011965 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved