| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 247 人关注过本帖
标题:链表删除的问题
收藏  订阅  推荐  打印 
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6
链表删除的问题

本人是莱鸟~所以对一个链表删除问题想了很久与调试了很久都不能成功删除答案;想问问各位高手~
程序是这样的:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
#define LEN sizeof(LNode)
typedef struct LNode{//建立单链表的顺序存储结构
    int data;
    struct LNode *next;
}LNode,*LinkList;

//建立单链表
LinkList creat(int n) {
    //正序输入n个元素的值,建立带表头结点的单链线性表
    LinkList head,r,p;
    int x,i;

    head=(LNode*)malloc(LEN);//生成新结点
    r=head;
    printf("请输入%d递增元素:\n",n);
    for(i=n;i>0;i--) {
        scanf("%d",&x);
        p=(LNode*)malloc(LEN);
        p->data=x;
        r->next=p;
        r=p;/*插入到表头*/ }
    r->next=NULL;
    return head;
}

//显示单链表中的元素
void output(LinkList head) {
    LinkList p;
    
    p=head->next;
    do {
        printf("%3d",p->data);
        p=p->next;
    } while(p);
    printf("\n");
}

void Remove(LinkList L, int mink, int maxk) {
    /*删除链表中所有值大于mink且小于maxk的元素,同时释放被删除结点空间*/
    LinkList p;
    int i;
    
    printf("%d %d\n",mink, maxk);
    p = L;
    for (i=0; i < SIZE;i++) {
        if (p->data > mink) {
            if (p->data < maxk)
            p->next = p->next->next;} //p是最后一个不大于mink的元素
    }
    printf("打印删除后的数列:\n");
    output(p);
    free(p);
}

void main()
{
    int mink, maxk, i=0;
    LinkList L;

    L = creat(SIZE); //建立单链表
    printf("请输入需要删除数列的范围:\n");
    scanf("%d %d",&mink,&maxk);
    /*删除链表中所有值大于mink且小于maxk的元素,同时释放被删除结点空间*/
    Remove(L, mink, maxk);
}
其中我发现Remove函数起不到作用,究竟是错在哪里?
望高手指点~~
搜索更多相关主题的帖子: 链表  删除  
2008-9-22 09:10
herostar1986
Rank: 1
等级:新手上路
帖子:11
积分:212
注册:2008-9-16

修改函数如下:
void Remove(LinkList L.int mink,int maxk)
{
LinkList p,q;
p=L;
q=p->next;
while(q!=NULL)
{
while(q->data>mink&&q->data<maxk&&q!=NULL)
{
p->next=q->next;
free(q);
q=q->next;
}
p=p->next;
q=p->next;

}
}
2008-9-22 09:23
benzeen
Rank: 2
等级:注册会员
威望:3
帖子:49
积分:614
注册:2008-9-20

这个是从后边加入节点吗?
2008-9-22 13:07
p1s
Rank: 3Rank: 3
等级:中级会员
威望:5
帖子:344
积分:3682
注册:2005-11-4

学链表记得先连后断的口诀,都能解决。
2008-9-22 13:18
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6

[quote][bo][un]herostar1986[/un] 在 2008-9-22 09:23 的发言:[/bo]

修改函数如下:
void Remove(LinkList L.int mink,int maxk)
{
LinkList p,q;
p=L;
q=p->next;
while(q!=NULL)
{
while(q->data>mink&&q->datanext=q->next;
free(q);
q=q->next;
}
p=p->next;
q=p->nex ... [/quote]




谢谢哦~~但可惜还是不行~~不知道错在哪里?
2008-9-22 22:56
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6

我顶~~
2008-9-22 23:35
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050924 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved