题目
在长度为n(n >1)的()上,删除第一个元素,其算法的时间复杂度为O(n)。A. 只有首结点指针h的不带头结点的单向循环链表B. 只有尾结点指针r的不带头结点的单向循环链表C. 只有尾结点指针r的带头结点h的单向循环链表D. 只有头结点指针h的单向循环链表
在长度为$n(n >1)$的()上,删除第一个元素,其算法的时间复杂度为$O(n)$。
A. 只有首结点指针$h$的不带头结点的单向循环链表
B. 只有尾结点指针$r$的不带头结点的单向循环链表
C. 只有尾结点指针$r$的带头结点$h$的单向循环链表
D. 只有头结点指针$h$的单向循环链表
题目解答
答案
A. 只有首结点指针$h$的不带头结点的单向循环链表
解析
本题考查不同类型链表删除第一个元素的算法时间复杂度相关知识。解题的关键在于分析每种链表结构在删除第一个元素时的操作步骤以及所需的时间。
选项A
对于只有首结点指针$h$的不带头结点的单向循环链表:
- 要删除第一个元素,首先需要找到链表的尾结点。因为是单向循环链表且只有首结点指针,所以需要从首结点开始遍历整个链表,直到找到尾结点。
- 设链表长度为$n$,遍历链表的时间复杂度为$O(n)$。
- 找到尾结点后,将尾结点的指针域指向首结点的下一个结点,然后释放首结点,这两个操作的时间复杂度为$O(1)$。
- 所以,总的时间复杂度主要由遍历链表的操作决定,为$O(n)$。
选项B
对于只有尾结点指针$r$的不带头结点的单向循环链表:
- 由于尾结点指针$r$指向尾结点,而尾结点的下一个结点就是首结点。
- 可以直接通过尾结点指针$r$找到首结点,然后将尾结点的指针域指向首结点的下一个结点,最后释放首结点。
- 这些操作都只需要常数时间,所以时间复杂度为$O(1)$。
选项C
对于只有尾结点指针$r$的带头结点$h$的单向循环链表:
- 因为有头结点,且尾结点指针$r$指向尾结点,尾结点的下一个结点是头结点。
- 可以直接通过尾结点指针$r$找到头结点,然后将头结点的指针域指向首结点的下一个结点,最后释放首结点。
- 这些操作都只需要常数时间,所以时间复杂度为$O(1)$。
选项D
对于只有头结点指针$h$的单向循环链表:
- 头结点的下一个结点就是首结点。
- 可以直接将头结点的指针域指向首结点的下一个结点,然后释放首结点。
- 这些操作都只需要常数时间,所以时间复杂度为$O(1)$。