一.单选题(共5题,50.0分)
1
假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是______。
↓p ↓q
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
→│8 │ ┼→│4 │ ┼→│ 3│ ┼→
└─┴─┘ └─┴─┘ └─┴─┘
(10.0分)
- A、
delete q; p->next=q->next;
- B、
(*p).next=(*q).next; delete q;
- C、
q=(*q).next; (*p).next=q; delete q;
- D、
q=q->next; p->next=q; p=p->next;delete p;
正确答案: B
答案解析:
选项A的错误在于,先已经把q结点给释放,无法再执行下面的语句了;选项C和D的错误在于因为有了q=(*q).next做了赋值,则delete q释放了原来q后面的一个结点。
2
有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data;
struct node *next;
}*p,*q,*r;
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
─→ │ │ ┼→│ │ ┼→│ │ ┼→
└─┴─┘ └─┴─┘ └─┴─