主题:小谈链表中的症结问题
[size=3]/*删除线性表中,指定的某个字母(通过函数来实现)*/[/size]
#include <iostream>
#define L 9
using namespace std;
typedef struct Lnode
{
char letter;
struct Lnode *next;
}Linklist;
Linklist *head,*p,*rear;
void dele(Linklist *,int);
void prift(Linklist *);
int main()
{
head=(Linklist *)malloc(sizeof(Linklist));
head->next=NULL;
p=head;
for(int i=0;i<L;++i)
{
rear=(Linklist *)malloc(sizeof(Linklist));
rear->letter='A'+i;
rear->next=NULL;
p->next=rear;
p=p->next;
//free(rear); 此处要不要释放rear空间
}
prift(head); // 输出序列
/***********************删除某个元素 */
int serial;
cout<<"删除元素字母,请输入元素序号:\t";
cin>>serial;
dele(head,serial);
prift(head);
return 0;
}
//输出函数的实现
void prift(Linklist *head0)
{
Linklist *pf;
pf=(Linklist *)malloc(sizeof(Linklist));
for(pf=head;pf->next!=NULL;pf=pf->next)
{
cout<<pf->letter<<"\t";
}
cout<<pf->letter<<endl;
return ;
}
//删除某个元素函数实现
void dele(Linklist *head0,int serial0)
{
Linklist *rep;
rep=(Linklist *)malloc(sizeof(Linklist));
int m=0;
while(rep->letter!=NULL)
{
if(serial0<1||serial0>26)
{
cout<<"error!"<<endl;
}
else
{
while(m<serial0-1) //寻找serial0的前一个节点
{
rep=rep->next;
m++;
}
rep->next=rep->next->next; //删除serial0 所指节点
free(rep->next);
break;
}
}
}
#include <iostream>
#define L 9
using namespace std;
typedef struct Lnode
{
char letter;
struct Lnode *next;
}Linklist;
Linklist *head,*p,*rear;
void dele(Linklist *,int);
void prift(Linklist *);
int main()
{
head=(Linklist *)malloc(sizeof(Linklist));
head->next=NULL;
p=head;
for(int i=0;i<L;++i)
{
rear=(Linklist *)malloc(sizeof(Linklist));
rear->letter='A'+i;
rear->next=NULL;
p->next=rear;
p=p->next;
//free(rear); 此处要不要释放rear空间
}
prift(head); // 输出序列
/***********************删除某个元素 */
int serial;
cout<<"删除元素字母,请输入元素序号:\t";
cin>>serial;
dele(head,serial);
prift(head);
return 0;
}
//输出函数的实现
void prift(Linklist *head0)
{
Linklist *pf;
pf=(Linklist *)malloc(sizeof(Linklist));
for(pf=head;pf->next!=NULL;pf=pf->next)
{
cout<<pf->letter<<"\t";
}
cout<<pf->letter<<endl;
return ;
}
//删除某个元素函数实现
void dele(Linklist *head0,int serial0)
{
Linklist *rep;
rep=(Linklist *)malloc(sizeof(Linklist));
int m=0;
while(rep->letter!=NULL)
{
if(serial0<1||serial0>26)
{
cout<<"error!"<<endl;
}
else
{
while(m<serial0-1) //寻找serial0的前一个节点
{
rep=rep->next;
m++;
}
rep->next=rep->next->next; //删除serial0 所指节点
free(rep->next);
break;
}
}
}