单向循环链表

来源:百度知道 编辑:UC知道 时间:2024/06/10 09:39:17
假设某个不设头指针的无头结点单向循环链表的长度大于1,s为指向链表中某个结点的指针。算法f 30的功能是,删除并返回链表中指针s所指结点的前驱。请在空缺处填入合适的内容,使其成为完整的算法。
typedef struct node {
DataType data;
struct node *next;
}*LinkList;
DataType f 30(LinkList s) {
LinkList pre,p;
DataType e;
pre=s; ’
p=s->next;
while( (1) ){
pre=p;
____________(2) ;
}
pre ->next= (3) ;
e=p->data;
free(p);
return e;
}
解释一下,各行代码吧,尤其是DataType f 30(LinkList s) {
LinkList pre,p;
DataType e;
pre=s; ’
p=s->next;
while( (1) ){
pre=p;
____________(2) ;

解释一下,各行代码吧,尤其是DataType f 30(LinkList s) {
LinkList pre,p;
DataType e;
pre=s; ’
p=s->next;
while( (1) ){
pre=p;
____________(2)

(1) p!=s //注意,这里是p,不是p->next,因为是pre指向s的前驱
(2) p=p->next;
(3) p->next

(1) p->next!=s //p最后指向要被删除的那个节点
(2) p=p->next //循环后移,直到遇到要删除的节点
(3) p->next //跳过p, 也就是s的前驱