以下算法是删除带头结点单链表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);
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);
举一反三
- 下列算法的功能是:删除单链表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
- 在循环双链表的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所指的结点(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指向结点的后继结点,则运行的操作为( ) A: q=p->next;p->next=p->next->next;free(q); B: p=p->next;q=p->next;p=q->next;free(q); C: q=p->next->next;p=p->next;free(q); D: p=p->next->next;q=p->next;free(q);
- 已知L是带头节点的单链表,节点p不是头节点(第一个节点),也不是尾节点,删除节点p的直接后继节点的语句序列是() A: p=p->next;free(p); B: p->next=p;free(p->next); C: p->next=p->next->next;free(p->next); D: p=p->next->next;free(p->next);