假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表中某个结点的指针,试编写算法在链表中删除指针s所指结点的前驱结点。 StatusListDelete_CL(LinkList &S) { LinkList p,q; if(S==S->next)return ERROR; q=S; p=S->next; while( ){ q=p; p=p->next; } q->next=p->next;
举一反三
- 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( )。 A: p->next=s->next;s->next=q; B: s->next=q;p->next=s->next; C: s->next=p;q->next=s->next; D: q->next=s->next;s->next=p;
- 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q所指结点和p所指结点之间插入s所指结点,则执行()。 A: p->next=s;s->next=q; B: q->next=s;s->next=p; C: p->next=s->next;s->next=p; D: s->next=p->next;p->next=s;
- 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被嵌入的结点X,则在结点A和结点B嵌入结点X的操作序列为() A: s->next=p->next;p->next=-s; B: q->next=s; s->next=p; C: p->next=s->next;s->next=p; D: p->next=s;s->next=q
- 在一个带头结单链表中,已知 q所指结点是p所指向的前驱结点,若在q和p之间插入s结点,则执行( )。 A: s->next=p->next;p->next=s B: p->next=s->next;s->next=p C: q->next=s;s->next=p D: p->next=s;s->next=q
- 已知一个单链表中,指针q指向指针p的前趋结点,若在指针q所指结点和指针p所指结点之间插入指针s所指结点,则需执行( ) A: q→next=s;p→next=s; B: q→next=s;s→next=p; C: q→next=s;q→next=p; D: q→next=s;s→next=q;