| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:请教一个关于单链表删除的问题
只看楼主 加入收藏
woshixinshou
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-7-18
收藏
 问题点数:0 回复次数:3 
请教一个关于单链表删除的问题

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
typedef struct node
{
int date;
struct node *next;
}slnode,*Linknode;
Linknode creat_list()
{
Linknode head;
int n;
head=(Linknode)malloc(sizeof(slnode));
head->next=NULL;
cout<<"请输入结点个数"<<endl;
cin>>n;
cout<<"请输入结点元素"<<endl;
head->date=n;
for (int i=0;i<n;i++)
{
Linknode p ;
p=(Linknode)malloc(sizeof(slnode));
p->next=head->next;
head->next=p;
cin>>p->date;
};
return head;

}

void display_list(Linknode L)
{
Linknode p;
p=L;
cout<<"输出"<<endl;
for(int i=0;i<L->date;i++)
{
p=p->next;
cout<<p->date;
};
}
Linknode intsert_node(Linknode L)
{
int locat;
int ielement;
Linknode Ielement,p;
Ielement=(Linknode)malloc(sizeof(slnode));
Ielement->next=NULL;
cout<<"插人的元素:"<<endl;
cin>>ielement;
Ielement->date=ielement;
p=(Linknode)malloc(sizeof(slnode));
p=L;
cout<<"插入第几个结点:"<<endl;
cin>>locat;
L->date=L->date+1;
for(int i=0;i<locat-1;i++)
{
L=L->next;
};
Ielement->next=L->next;
L->next=Ielement;
return p;


}
Linknode delete_node (Linknode L)
{
Linknode p;
int locat;
p=(Linknode)malloc(sizeof(slnode));
p=L;
cout<<"请输入删除结点的位子"<<endl;
cin>>locat;
if(locat=L->date)
{
for(int i=0;i<locat-1;i++)
L=L->next;
L->next=NULL;
}
else {
for(int i=0;i<locat-1;i++)
L=L->next;
L->next=L->next->next;
};
return p;
}


void main()
{
Linknode p,q;
p=creat_list();
display_list(p);
q=intsert_node(p);
display_list(q);
display_list(delete_node(q));

free (p);
}
程序运行到删除程序输出时出错;

搜索更多相关主题的帖子: 单链 删除 
2006-07-22 20:08
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
p=(Linknode)malloc(sizeof(slnode));
p=L;
内存丢失,p有空间了,又指向其他地方
Ielement->date=ielement;
if(locat=L->date)

date里到底是什么??
麻烦整理思路,然后再发上来

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-23 00:53
woshixinshou
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-7-18
收藏
得分:0 

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
typedef struct node
{
int date;
struct node *next;
}slnode,*Linknode;
Linknode creat_list() //创建链表//
{
Linknode L;
int n;
L=(Linknode)malloc(sizeof(slnode));
L->next=NULL;
cout<<"请输入结点个数"<<endl;
cin>>n;
cout<<"请输入结点元素"<<endl;
L->date=n; //把结点的个数复值给头结点指向的date//
for (int i=0;i<n;i++)
{
Linknode p ;
p=(Linknode)malloc(sizeof(slnode));
p->next=L->next;
L->next=p;
cin>>p->date;
};
return L;

}

void display_list(Linknode L) //链表的展开//
{
Linknode p;
p=L;
cout<<"输出"<<endl;
for(int i=0;i<L->date;i++)
{
p=p->next;
cout<<p->date;
};
}
Linknode delete_node (Linknode L)//链表删除
{
Linknode p;
int locat;
p=(Linknode)malloc(sizeof(slnode));
p=L;
cout<<"请输入删除结点的位置"<<endl;
cin>>locat;
if(locat=L->date) //删除最后的结点//
{
for(int i=0;i<locat-1;i++)
L=L->next;
L->next=NULL;
}
else { //删除不是最后的结点//
for(int i=0;i<locat-1;i++)
L=L->next;
L->next=L->next->next;
};
return p;
}


void main()
{
Linknode p;
p=creat_list();
display_list(p);
display_list(delete_node(p));

free (p);
}

2006-07-23 09:28
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

这样就好了:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct node
{
int date;
struct node *next;
}slnode,*Linknode;
Linknode creat_list() //创建链表//
{
Linknode L;
int n;
L=(Linknode)malloc(sizeof(slnode));
L->next=NULL;
cout<<"请输入结点个数"<<endl;
cin>>n;
cout<<"请输入结点元素"<<endl;
L->date=n; //把结点的个数复值给头结点指向的date//
for (int i=0;i<n;i++)
{
Linknode p ;
p=(Linknode)malloc(sizeof(slnode));
p->next=L->next;
L->next=p;
cin>>p->date;
};
return L;

}

void display_list(Linknode L) //链表的展开//
{
Linknode p;
p=L;
cout<<"输出"<<endl;
for(int i=0;p->next;i++)
{
p=p->next;
cout<<p->date;
};
}
Linknode delete_node (Linknode L)//链表删除
{
Linknode p;
int locat;
//p=(Linknode)malloc(sizeof(slnode));
p=L;
do
{
cout<<"请输入删除结点的位置"<<endl;
cin>>locat;
if(locat<=L->date&&locat>0)break;
}while(1);
if(locat==L->date) //删除最后的结点//
{
for(int i=0;i<locat-1;i++)
L=L->next;
Linknode tail=L->next;
delete tail;
tail=NULL;
L->next=NULL;
}
else
{ //删除不是最后的结点//
for(int i=0;i<locat-1;i++)
L=L->next;
Linknode temp=L->next;
L->next=L->next->next;
delete temp;temp=NULL;
}
return p;
}

void del(Linknode p)
{
while(p)
{
Linknode newNode=p;
p=p->next;
free(newNode);
}
}
void main()
{
Linknode p;
p=creat_list();
display_list(p);
display_list(delete_node(p));
del(p);
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-23 11:08
快速回复:请教一个关于单链表删除的问题
数据加载中...
 
   



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

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