问题 单项选择题

单向链表中往往含有一个头节点,该节点不存储数据元素,一般令链表的头指针指向该节点,而该节点指针域的值为第一个元素节点的指针。以下关于单链表头节点的叙述中,错误的是()。

A.若在头节点中存入链表长度值,则求链表长度运算的时间复杂度为O(1)

B.在链表的任何一个元素前后进行插入和删除操作可用一致的方式进行处理

C.加入头节点后,代表链表的头指针不因为链表为空而改变

D.加入头节点后,在链表中进行查找运算的时间复杂度为O(1)

答案

参考答案:D

解析:

[要点解析] 本题考查单链表头节点的相关知识。

A选项:由于在头节点中存入链表长度值,在遍历链表时先从头指针开始,头指针指向头节点,头节点的数据域即为链表长度,故选项A正确。

B选项:插入运算是将值为x的新节点插入到表的第f个节点的位置上,即插入到ai-1ai之间。因此,必须首先找到ai-1的存储位置p,然后生成一个数据域为x的新节点,并令q指针指向该新节点,新节点的指针域指向节点ai,。从而实现三个节点ai-1,x和ai之间的逻辑关系的变化。

定位ai-1并将指针p指向它,如下。

q=new LNode;

q->data=x;

q->next=p->next;

p->next=q;

删除运算是将表的第i个节点删去。因为在单链表中节点ai的存储地址是在其直接前区节点ai-1的指针域next中,所以必须首先找到ai-1的存储位置p。然后令p->next指向ai的直接后继节点,即把ai从链上摘下。最后释放节点ai的空间。

r=p->next;

p->next=r->next;

delete r:

故选项B正确。

C选项:增加一个表头节点,数据域可根据需要使用或不用。带头节点的链表特点如下。

a、表中第一个节点和在表的其他位置上的操作一致,无需进行特殊处理。

b、无论链表是否为空,其头指针是指向头节点。因此空表和非空表的处理统一。故选项C正确。

D选项:查找过程从开始节点出发,顺着链表逐个将节点的值和给定值key作比较。算法如下。

LNode *locatenode (head, key)

{ LNode *p;

p=head->next;

while(p&&p->data! =key)

p=p->next;

return p;

}

该算法的执行时间亦与输入实例中的取值key有关,其平均时间复杂度的分析类似于按序号查找。故选项D错误。

单项选择题
单项选择题