单链表的删除操作procedure delete(L:linklist; I:integer);var p,q:pointer;

题目

单链表的删除操作

procedure delete(L:linklist; I:integer);

var p,q:pointer;


相似考题

3.阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 4-1 (a) 所示,删除第 3 个元素结点后的单链表如 图 4-1 (b) 所示。图4-1define SUCCESS 0 define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node ,*LinkList; 【C 代码】 LinkList GetListElemPtr(LinkList L ,int i) { /* L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点: 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if (i<1 ∣∣ !L ∣∣ !L->next) return NULL; k = 1; P = L->next; / *令p指向第1个元素所在结点*/ while (p && (1) ) { /*查找第i个元素所在结点*/ (2) ; ++k; } return p; } Status DelListElem(LinkList L ,int i ,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令p指向第i个元素的前驱结点*/ if (i==1) (3) ; else p = GetListElemPtr(L ,i-1); if (!p ∣∣ !p->next) return ERROR; /*不存在第i个元素*/ q = (4) ; /*令q指向待删除的结点*/ p->next = q->next; /*从链表中删除结点*/ (5) ; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }

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

 

begin
p:=loc(L,I-1);
q:=p^.next;
p^.next:=q^.next;
dispose(q);
dec(L.len);
end;

更多“单链表的删除操作 procedure delete(L:linklist; I:integer);var p,q:pointer; ”相关问题
  • 第1题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    [说明]
    函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。
    函数DelListElem(LinkList L,int i,ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。
    例如,某含头结点单链表L如下图(a)所示,删除第3个元素结点后的单链表如下图(b)所示。
    1.jpg

    #define SUCCESS 0 #define ERROR -1 typedef intStatus; typedef intElemType;

    链表的结点类型定义如下:

    typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList; [C代码] LinkListGetListElemPtr(LinkList L,int i) { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if(i<1 || !L || !L->next) return NULL; k=1; p=L->next; /*令p指向第1个元素所在结点*/ while(p &&______){ /*查找第i个元素所在结点*/ ______; ++k; } return p; } StatusDelListElem(LinkList L,int i,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令P指向第i个元素的前驱结点*/ if(i==1) ______; else p=GetListElemPtr(L,i-1); if(!P || !p->next) return ERROR; /*不存在第i个元素*/ q=______; /*令q指向待删除的结点*/ p->next=q->next; //从链表中删除结点*/ ______; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }


    答案:
    解析:
    k<i
    p=p->next
    p=L
    p->next
    *e=q->data


    【解析】

    本题考查C语言的指针应用和运算逻辑。
    本问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。
    函数GetListElemPtr(LinkList L,int i)的功能是在L为头指针的链表中查找第i个元素,若找到,则返回指向该结点的指针,否则返回空指针。描述查找过程的代码如下,其中k用于对元素结点进行计数。

    k=1; p=L->next; /*令p指向第1个元素所在结点*/

  • 第2题:

    对于单链表L1,其节点类型为LinkList,指出以下算法的功能。 void fun(LinkList *&L,ElemType x,ElemType y) { LinkList *p=L; while (p!=NULL) { if (p->data==x) p->data=y; p=p->next; } }


    current->link=first

  • 第3题:

    对于带头节点的单链表L1,其节点类型为LinkList,指出以下算法的功能。 void fun(LinkList *&L,ElemType x,ElemType y) { LinkList *p=L->next; while (p!=NULL) { if (p->data==x) p->data=y; p=p->next; } }


    表头节点的指针域 next 与 L 的值相等

  • 第4题:

    设指针变量p指向单链表中某结点的直接前驱,若删除单链表中该结点,需要修改指针的操作序列为 。

    A.q=p->next; p->next=q->next;free(q);

    B.q=p->next; free(q);

    C.p->next=p->next->next;free(p->next);

    D.q=p->next; free(q);


    q-&gtnext

  • 第5题:

    对于带头节点的单链表L1,其节点类型为LinkList,指出以下算法的功能。 void fun(LinkList *&L,ElemType x,ElemType y) { LinkList *p=L->next; while (p!=NULL) { if (p->data==x) p->data=y; p=p->next; } }


    表头节点的指针域 next 与 L 的值相等