- 设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点
void del_x(Linklist &L, ElemType x){
LNode *p;
if(L == NULL){
return;
}
if(L->data == x){
p = L;
L = L->next;
free(p);
del_x(L, x);
}else{
del_x(L->next, x);
}
}
- 在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作
// 普通方式
void del_x(Linklist &L, ElemType x){
LNode *p = L->next, *pre = L, *q;
while(p != NULL){
if(p->data == x){
q = p;
p = p->next;
pre->next = p;
free(q);
}else{
pre = p;
p = p->next;
}
}
}
// 尾插法,值不为x的结点尾插建表,值为x的结点释放
void del_x(Linklist &L, ElemType x){
LNode *p = L->next, *r = L, *q;
while(p != NULL){
if(p->data != x){
r->next = p;
r = p;
p = p->next;
}else{
q = p;
p = p->next;
free(q);
}
}
r->next = NULL;
}
- 设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值
// 递归输出后面的一个结点
void R_Print(Linklist L){
if(L->next != NULL){
R_Print(L->next);
}
print(L->data);
}