| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1728 人关注过本帖
标题:链表删除的问题
只看楼主 加入收藏
hcanhong
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:58
专家分:0
注 册:2008-9-6
收藏
 问题点数:0 回复次数:5 
链表删除的问题
本人是莱鸟~所以对一个链表删除问题想了很久与调试了很久都不能成功删除答案;想问问各位高手~
程序是这样的:
#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-09-22 09:10
herostar1986
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-9-16
收藏
得分:0 
修改函数如下:
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-09-22 09:23
benzeen
Rank: 2
等 级:新手上路
威 望:3
帖 子:49
专家分:0
注 册:2008-9-20
收藏
得分:0 
这个是从后边加入节点吗?
2008-09-22 13:07
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
学链表记得先连后断的口诀,都能解决。
2008-09-22 13:18
hcanhong
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:58
专家分:0
注 册:2008-9-6
收藏
得分:0 
[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 ...





谢谢哦~~但可惜还是不行~~不知道错在哪里?
2008-09-22 22:56
hcanhong
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:58
专家分:0
注 册:2008-9-6
收藏
得分:0 
我顶~~
2008-09-22 23:35
快速回复:链表删除的问题
数据加载中...
 
   



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

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