参考答案和解析
正确答案:

(1)p->next!=NULL(2)p->next=q->next

更多“函数实现单链表的删除算法,请在空格处将算法补充完整。 ”相关问题
  • 第1题:

    以下算法是求取某带头结点的单链表的长度,请补充完整代码。 int LinkLength(LinkList L) { Node* p=L->next; int i=0; ...... //补充此处代码 return i; //返回链表长度 }


    head ->next==NULL

  • 第2题:

    编写算法,删除某无序单链表中,结点值最大的结点。


    Status ListDelete_L(LinkList &L,int i, Elemtype &e){ //delete No.i node in Linklist L with head node p=L;j=0; while(p&&jnext;j++;} //to find prior node of No.i if(!(p->next)||j>i-1) return ERROR; // ilength q=p->next; //q point to delete i node p->next=q->next; // delete i node e=q->data; //return value of node i free(q); // free deleted node return OK;} //listDelete_L

  • 第3题:

    以下算法是求取某带头结点的单链表的长度,请将算法补充完整。 int ListLength(LinkList L) { p=L; i=0; ...... //补充剩余代码 }


    head ->next==NULL

  • 第4题:

    试写一算法将单链表中所有值为x的结点删除,返回被删除结点的个数,假设单链表中数据元素类型为整型。


    O(n)

  • 第5题:

    已知一个带头结点单链表,编写一个删除其值为x的结点的算法(保证值为x的结点只有一个) (1)写出带头单链表存储结构 (2)完成函数int ListDelete_L(LinkList L,ElemType x)实现删除值为x的结点


    (1)数据结构 struct Node; typedef struct Node*PNode; structNode{ int info; PNode link; }; typedef struct Node*LinkList; struct DoubleNode; typedef struct DoubleNode*PDoubleNode; struct DoubleNode{ int info; PDoubleNode llink,rlink; }; typedef struct DoubleNode*DLinkList; (2)思路 根据单链表的内容,一边复制数据,一边产生双链表,最后把双链表的头尾相接。 (3)算法 DLinkList convert(LinkList llist){ /*返回根据LinkList llist指向的单链表创建的带头结点的循环双链表的指针,若创建失败,则返回NULL*/ PNode pnode; DLinkList dllist; PDoubleNode pdnode,pdpre; dllist=createNullDList(); if(dllist==NULL)return NULL; pdpre=dllist; for(pnode=llist->link;pnode!=NULL;pnode=pnode->link){ pdnode=(PDoubleNode)maltoc(sizeof(struct DoubleNode)); if(pdnode==NULL){ freedlist(dllist); return NULL; } pdnode->info=pnode->info; pdpre->rlink=pdnode; pdnode->llink=pdpre; pdpre=pdnode; } pdpre->rlink=dllist; dllist->llink=pdpre; return dllist; } (4)代价分析 最坏时间代价为O(n)。本题也是给出一种带头结点的循环双链表的存储表示和一种构造方法。