单链表的插入与删除

单链表的按照位序插入带头节点

//单链表的存储结构,先对单链表的存储结构进性封装
typedef struct {
Elemtype data//数据域
LNode *next;//指针域
}LNode , *LinkList
//在第I个位置插入元素e
//首先要判断插入的位置是否合法
bool ListInsert (LinkList &L , int i, Elemtype e){
if (i< 1)
return false;
LNode *p//指针P指向当前扫描扫描到的结点
int j = 0; 当前p指向向的是第几个结点
p = L;
//首先要找到第I-1个结点的位置
while(p!=NULL && j < i-1){ 判断p!=NULL,是为了判断防止输入的I值过大
p=p->next;
j++;
}

if(p=NULL)
return false;//i的值不合法

//若找到第i-1个位置
LNode *s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true; //插入成功;
}

按位序插入不带头节点

bool ListInsert(LinkList &L, int i ,Elemtype e){

if(i==1){//位置1处的的结点插入的操作与其他结点不同
LNode *s =new LNode;
s->data = e;
s-> next = L;
L = s; //头指针指向新的结点,不管带不带头结点,头指针都指向第一个结点
return true;
}

LNode *p//指针P指向当前扫描扫描到的结点
int j = 1; 当前p指向向的是第几个结点,这里要注意
p = L;
//首先要找到第I-1个结点的位置
while(p!=NULL && j < i-1){ 判断p!=NULL,是为了判断防止输入的I值过大
p=p->next;
j++;
}

if(p=NULL)
return false;//i的值不合法

//若找到第i-1个位置
LNode *s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true; //插入成功;

}

**

指定结点的前插操作

将结点插入到该节点之后,然后再将两结点中的数据进行交换
bool IsertPriorNode(LNode *p ,ElemType e){
if (p==NULL)
return false;
LNode *s = new LNode;
if(s==NULL)//内存分配失败
return false;
s->next = p->next;
p->next =s;
s->data = p->data;
p->data =e;
}

指定结点的后插操作


bool InsertNextNode (LNode *p , ElemType e){
if (p==NULL)
return false;

LNode *s = new LNode;
if(s== NULL)
return false;//内存分配失败

s->data = e;
s->next = p->next;
p->next =s;
return true;

}

带头结点的删除操作

bool ListDelete (LinkList &L ,int i ,ElemType &e){
if(i < 1)
return false;
LNode *p;
int j=0;
p=L;//指向头节点,头结点是第0个结点

while(p!=NULL && j < i-1){//循环找到第 i-1 个结点
p=p->next;
j++;
}

if(p==NULL)
return false;//i的值不合法

LNode *q = p->next;//q指向被删除的结点
e = q->data;
p->next = q->next;
free(q); //始放结点的储存空间
return true;


}

删除指定结点p

bool DeleteLNode (LNode *p){
if (p==NULL)
return false;
LNode *q = p->next ; //令q节点指向*p的后继节点
p->data = p->next->data;//和后继结点交换数据域
p->next = q->next;//将*q结点从链中断开
free(q);
return true;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值