单链表查找
算法思路:
- 声明一个节点 p 指向链表的第一个节点,初始化 j 作为计数器,从 1 开始 2. 当 j<i 的时候,遍历链表,让 p 不断向后移动,计数器 j+1
- 查找成功时,返回节点
- 当到了链表的末尾即 p 为空时,则说明第 i 个元素不存在(摘自灰灰考研)
int getelem (LinkList &L,int i,Elemtypy &e){
int j=1; LinkList p;
p=L->next;
while(p&&j<i){
p=p->next;
++i;
}
if(!p||j>i) return error;
e=p->data;
return ok;
}
单链表插入
算法思路:
- 声明一个节点 p 指向链表的第一个节点,初始化 j 作为计数器从 1 开始。 2. 当 j<i 时,遍历链表,使 p 指针向后移动,不断指向下一个节点,此时 j+1。 3. 如果遍历到链表尾部,则说明第 i 个元素不存在。
- 否则查找成功,创建一个空节点 s。
- 将数据 e 赋值给 s->data。
- 单链表插入:s->next = p->next; p->next = s;。
- 返回成功,算法结束。(摘自灰灰考研)
int LinkInsert(LinkList &L,int i,Elemtype &e)
{
int j=1;
LinkList p,s;
p=L;
while(p&&j<i){
p=p->next;
++j;
}
if(!p||j>i) return error;
s=(LinkList)malloc(sizeof(LNode));
s->next=p->next;
p->next=s;
return ok;
}
单链表删除
算法思想:
- 首先找到Ai-1的存储位置p,保存要删除的Ai的值
- 令p->next指向i-1
- 释放Ai的空间
status ListDelete(LinkList &L,int i,Elemtype &e)
{
LinkList p=L,q;
int j=0;
while(p->next &&j<i-1) {p=p->next; ++j;}
if (!(p->next)||j>i-1) return error;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return ok;
}