看到底是要选择什么样的链表,这类题就是看需要找到的元素的位置在哪即可,删除和插入都要找到其前一个位置
一、选择题
1、
答案:A
解释:非空且循环,所以尾结点的下一个是头结点
2、
答案:D
解释:
在p后面插入某一个结点s的话,先改变要插入结点s的前后指针,再改变p的指针(不管是单链表还是双向链表都是这个样子的)
D是s的前指针指向p,s的下一个为p的下一个,注意这个时候p所指的下一个还没变,p所指的下一个的前一个是s,p的下一个是s(这个时候p所指的下一个才发生了变化)。
3、
答案:C
解析:
删除p所指的结点也就是p,所以就是p的前一个的下一个指向p的下一个,p的下一个的前一个指向p的前一个
4、
答案:B
解析:
(1)尾指针的定义: 尾指针,指向最后一个元素
(2)仅有头指针的单链表虽然可以直接获得第一个元素,但是想要获得最后一个元素却需要遍历整个链表。而仅有尾指针的单链表给出的是带有尾结点的单循环链表,这样就可以直接得到最后一个元素,想要得到第一个元素只需要再遍历一个元素就可以
(3)单链表只能往前移动
问题实质是用最快的时间找到 最后一个元素和头元素,根据尾指针通过O(1)的时间找到最后一个元素,然后根据链表是单循环,往前移动一个元素就是头元素,综上所述答案为:仅有尾指针的单循环链表
5、(第四题是最后一个元素,第五题是最后一个结点)
答案:D
解析:
(1)题目问的是哪一种方式更省时间
(2)在最后一个结点附近操作,所以要先找到最后一个结点附近
带头结点的双向循环链表,头结点的前驱即可找到最后一个结点,可以快速插入,再向前可以找到最后一二个结点快速删除
单链表找到链表尾部需要扫描整个链表
双链表找到链表尾部也需要扫描整个链表
单循环链表只有单向指针,找到链表尾部也需要扫描整个链表
6、
答案:C
7、
答案:C
解析:
(1)在最后一个结点之后插入一个结点需要找到最后一个结点,删除最后一个结点需要的是找到最后一个结点的前一个,所以最快的是C。
8、
答案:C
9、
答案:D
解析:
(1)在最后一个结点之后插入一个结点需要找到最后一个结点,删除最后一个结点需要的是找到最后一个结点的前一个,所以最快的是带表头附加结点的双循环链表,代表头附加结点而且双循环。
(2)问题出现在查找效率上,链表最常用的操作是在末尾插入节点和删除尾节点 在尾巴插入 删除操作。都需要知道他的前导,而单链表要查找到最有一个元素需要遍历全部链表,循环双链表直接可以查到前导。
10、
答案:D
解析:
在最后一个结点后插入或删除第一个结点,如果仅仅需要删除第一个结点的话,仅带头结点即可,但是在最后一个结点后插入,必须要找到最后一个元素,这个时候仅有尾指针的单循环链表最快。
前面有很多的选择题是在最后一个结点之后插入一个结点或删除第一个结点,这样的一般是有两种操作
(1)仅有尾指针的单循环链表
(2)带表头附加结点的双循环链表
11、
答案:B
解析:
删除最后一个的话,需要找到最后一个元素的前一个,因为是单链表,所以与长度有关。
在单链表最后一个元素后插入一个新元素,因为尾指针和最后一个元素有关,在最后一个元素后插入需要找到的是最后一个元素,所以时间复杂度为O(1)
删除单链表中第一个元素和在单链表第一个元素前插入一个新元素与头指针有关
12、
答案:C
解析&