#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&head)//初始化单链表
{
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
}
void CreatList(LinkList *&head)//尾插法
{
int i,n;
LinkList *r,*s;
r=head;
cin>>n;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
cin>>s->data;
r->next=s;
r=s;
}
r->next=NULL;
}
bool ListDelete(LinkList *&head,int i,int e)//删除线性表第i-1个元素,将删除元素的值赋给e
{
LinkList *p=head,*q;
int j=0;
while(j<i-2 && p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
q=p->next;
if(q==NULL) //判断p下一个节点是否为空,若为空则不满足条件
return false;
e=q->data; //将要删除的元素赋给e
p->next=q->next;
free(q);
return true;
}
}
void DisplayList(LinkList *head) //输出
{
LinkList *p=head->next; //由于头节点不保存数据,所以从下一个开始
while(p!=NULL)
{
cout<<p->data<<' ';
p=p->next;
}
}
int main()
{
LinkList *p;
InitList(p);
CreatList(p);
int n,e;
cin>>n;
if(n==1)
cout<<"error!";
else if(ListDelete(p,n,e))
DisplayList(p);
else
cout<<"error!";
return 0;
}
SWUST数据结构--单链表的删除操作
最新推荐文章于 2024-04-01 17:23:19 发布