算法修改

来源:百度知道 编辑:UC知道 时间:2024/05/26 03:46:05
对给定的带头结点的单链表L,编写一个删除L中值为X的结点的直接前驱结点的算法

DeleteNode( Node* L, int x)
{
Node* p,q,r;
p = q = r = L;
while(p->next ! = NULL)
{
p = p ->next;
if(p->data == x)
break;
r = q;
q = p;
}
delete q;
r->next = p;
}

现规定该单循环链表,既无头结点,也无头指针,上述算法该如何修改?

Node* p,q,r,head(用head记住头指针的位置);
p = q = r = L=head;

while(p->next ! = NULL) 改成if(p->next ! = NULL){
p = p ->next;
if(p->data == x)
break;
r = q;
q = p;
}
delete q;
r->next = p;
}

esle
p->next =head;

做个哨兵节点即可。