编写不带头结点单链表的插入操作和删除操作算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写不带头结点单链表的插入操作和删除操作算法相关的知识,希望对你有一定的参考价值。
参考技术A Status ListInsert(LinkList &L,int i,ElemType e)// 在不设头结点的单链线性表L中第i个位置之前插入元素e
int j=1; // 计数器初值为1
LinkList s,p=L; // p指向第1个结点
if(i<1) // i值不合法
return ERROR;
s=(LinkList)malloc(sizeof(LNode)); // 生成新结点,以下将其插入L中
s->data=e; // 给s的data域赋值e
if(i==1) // 插在表头
s->next=L; // 新结点指向原第1个结点
L=s; // L指向新结点(改变L)
else
// 插在表的其余处
while(p&&j<i-1) // 寻找第i-1个结点
j++; // 计数器+1
p=p->next; // p指向下一个结点
if(!p) // i大于表长+1
return ERROR; // 插入失败
s->next=p->next; // 新结点指向原第i个结点
p->next=s; // 原第i-1个结点指向新结点
return OK; // 插入成功
Status ListDelete(LinkList &L,int i,ElemType &e)
// 在不设头结点的单链线性表L中,删除第i个元素,并由e返回其值
int j=1; // 计数器初值为1
LinkList q,p=L; // p指向第1个结点
if(!L) // 表L空
return ERROR; // 删除失败
else if(i==1) // 删除第1个结点
L=p->next; // L由第2个结点开始(改变L)
e=p->data; // 将待删结点的值赋给e
free(p); // 删除并释放第1个结点
else
while(p->next&&j<i-1) // 寻找第i个结点,并令p指向其前驱
j++; // 计数器+1
p=p->next; // p指向下一个结点
if(!p->next||j>i-1) // 删除位置不合理
return ERROR; // 删除失败
q=p->next; // q指向待删除结点
p->next=q->next; // 待删结点的前驱指向待删结点的后继
e=q->data; // 将待删结点的值赋给e
free(q); // 释放待删结点
return OK; // 删除成功
追问
你编译了么~
本回答被提问者采纳以上是关于编写不带头结点单链表的插入操作和删除操作算法的主要内容,如果未能解决你的问题,请参考以下文章