下列算法的功能是:删除单链表L(含两个或两个以上的数据结点)中第一个值为x的结点的前驱结点。请在空白处选择正确的语句。 int deleteFirstX(LinkList &L, ElemType x) { LinkList prepre = L, pre = prepre->next, p; if (pre->data == x) return 0; p = pre->next; while (p != NULL && p->data != x) { prepre = pre; ____________________; p = p->next; } if (p != NULL) { prepre->next = p; free(pre); return 1; } else return 0; }
A: pre = p
B: prepre->next = p
C: p = pre->next
D: p = prepre->next
A: pre = p
B: prepre->next = p
C: p = pre->next
D: p = prepre->next
举一反三
- 以下算法是删除带头结点单链表L中的最小的元素,横线处应填入的语句是( )。void DelMinNode(LinkList L){ p=L->next; pre=L; if(L==NULL) return; while(p->next!=NULL) //pre指向最小元素的前驱元素,开始默认第一个结点最小,pre指向头结点 { if(p->next->data [ pre-]next->data) pre=p; } //删除pre后面的结点 p=pre->next; ;} A: free(p); pre->next=p->next; B: free(p->next);pre->next=p->next; C: pre->next=p->next; free(p); D: p->next=pre->next;free(p);
- 在双向链表中删除指针p所指的结点(pre和next,是结点的指针域,pre指向结点的前驱,next指向结点的后继),则需要执行( )。 A: p↑.next:=p↑.pre;p↑.pre:=p; B: p↑.next↑.pre:=p↑.pre;p↑.pre↑.next:=p; C: p↑.pre:=p↑.next;p↑.next=p↑.pre; D: p↑.pre↑.next:=p↑.next;p↑.next↑.pre:=p↑.pre;
- 在循环双链表的p所指结点之后插入s结点的操作是( ) A: p->next=s; s->pre=p; p->next->pre=s; s->next=p->next; B: p->next=s; p->next->pre=s; s->pre=p; s->next=p->next; C: s->pre=p; s->next=p->next; p->next->pre=s; p->next=s; D: s->pre=p; s->next=p->next; p->next=s; p->next->pre=s;
- 在循环双链表的p所指结点之后插入s结点的操作是( ) A: p->next=s; s->pre=p; p->next->pre=s; s->next=p->next; B: p->next=s; p->next->pre=s; s->pre=p; s->next=p->next; C: s->pre=p; s->next=p->next; p->next->pre=s; p->next=s; D: s->pre=p; s->next=p->next; p->next=s; p->next->pre=s;
- 对于带头节点的单链表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; } }