比较插入,删除的定位条件
插入:要插入第i位前的位置,则p要找到插入前的第i-1位 。
在最后一位前插入,则p->next不存在。所以此处为p
while(p&&j<i-1) //p要找到 第i-1位 ,假如在4位前插入,第四位不一定存在 ,所以此处为p
{
p=p->next;
j++;
}
if(!p||j>i-1)
cout<<"查找错误";
删除:假如删除第4位,第四位一定存在 ,所以p->next一定存在 (p为第i-1位)
linklist p=l,q;
while(p->next&&j<i-1)//假如删除第4位,第四位一定存在 ,所以p->next一定存在
{
p=p->next;
j++;
}
if(!(p->next)||j>i-1)
cout<<"查找错误";
头插法:先建立一个带头结点的单链表

代码实现:
#include <stdio.h>
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int status;
typedef int elemtype;
typedef struct LNode{
elemtype data;
struct LNode *next; //定义的*next为指向结构体LNode类型的指针
}LNode,*linklist; // *linklist相等于一个列表头指针,也是结构体类型
//逆位序插入n个元素的值,建立带表头结点的单链表
status createlist(linklist &l,int n)
{int i;
linklist p;
l=(linklist)malloc(sizeof(linklist));
l->next=NULL;//先建立一个带头结点的单链表
for(i=n;i>0;i--)
{
p=(linklist)malloc(sizeof(linklist));//生成新结点
cout<<"请输入第"<<i<<"个数据:";
cin>>p->data;
p->next=l->next;
l->next=p;
}
i=0;
cout<<endl<<"输出链表:";
for(p=l->next;p!=NULL;p=p->next)
cout<<p->data<<" ";
cout<<endl<<endl;
return 0;
}
//插入结点
status listinsert(linklist &l,int i,elemtype e)
{//在链表l中的第i位前插入e
//在第i位前插入则要找到第i-1位
int j=0;
linklist p=l,q;//q为插入结点
while(p&&j<i-1)//p要找到 第i-1位 ,假如在4位前插入,第四位不一定存在 ,所以此处为p
{
p=p->next;
j++;
}
if(!p||j>i-1)
cout<<"查找错误";
q=(linklist)malloc(sizeof(linklist));
q->next=p->next;
p->next=q;
q->data=e;
cout<<"在第 "<<i<<" 位前插入 "<<e<<endl;
cout<<"插入后:" <<endl;
for(p=l->next;p!=NULL;p=p->next)
cout<<p->data<<" ";
return 0;
}
//删除结点
status listdelete(linklist &l,int i,elemtype e)
{//将带头结点的单链表线性表l中,删除第i个结点,并将其值赋于e输出
int j=0;
linklist p=l,q;
while(p->next&&j<i-1)//假如删除第4位,第四位一定存在 ,所以p->next一定存在
{
p=p->next;
j++;
}
if(!(p->next)||j>i-1)
cout<<"查找错误";
q=p->next;//q为要删除的结点
e=q->data;
p->next=q->next;//将待删除结点的前一个结点的指向改变
free(q);
cout<<"删除第 "<<i<<" 位 "<<e<<endl;
cout<<"删除后:"<<endl;
for(p=l->next;p!=NULL;p=p->next)
cout<<p->data<<" ";
cout<<endl<<endl;
return 0;
}
int main()
{
elemtype e,b=6;
linklist l;
createlist(l,5);
listdelete(l,4,e);
listinsert(l,5,b);
}
运行结果:

本文详细介绍了如何在单链表中进行插入和删除操作,并通过具体的代码示例展示了这两种操作的具体实现方式。文章还对比了两种操作在定位条件上的区别。
4105

被折叠的 条评论
为什么被折叠?



