对于带头节点的单链表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;
}
}
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;
}
}
举一反三
- (2)intBB(LinkList*L){LinkList*p,*q,*r;p=L->next;if(!p)return0;while(p->next){q=p;while(q->next){if(q->next->data!=p->data)q=q->next;else{r=q->next;q->next=r->next;free(r);}}p=p->next;}}Writethefunctionofthealgorithmabove.(5.0分)
- 下列算法的功能是:删除单链表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
- 以下算法是删除带头结点单链表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);
- 假设以带头结点的单链表表示线性表,阅读下列算法fun,并回答问题: (1)设线性表为( a1, a2,a3, a4, a5, a6, a7 ),写出执行算法fun后的线性表; (2)简述算法fun的功能。 void fun(LinkList L) {//L为带头结点单链表的头指针 ListNode *p,*q; p =L; while (p&&p->next) { q= p->next; p->next=q->next; p=q->next; free(q); } }
- 对以下代码的功能描述最准确的是()LinkList *Demo(LinkList *L)// L是无头结点的单链表{LinkList *q,*p;if(L!=NULL&&L->;next!=NULL){q=L;L=L->;next;p=L;while (p->;next)p=p->;next;p->;next=q; q->;next=NULL;}return (L);} A: 逆置线性表 B: 当表不空时,删除线性表的首个元素 C: 插入一个新的元素在表尾 D: 当表不空时,把原表的表首元素取下,并插入到表尾。