假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为 head 和 tail ,链表中每个结点有两个指 针域 prev 和 next ,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向循环链表,横线上应填的最 佳代码是( )。
// 链表结点
template <typename T>
struct ListNode {
T data;
ListNode* prev;
ListNode* next;
// 构造函数
explicit ListNode(const T& val = T())
: data(val), prev(nullptr), next(nullptr) {}
};
struct LinkedList {
ListNode<T>* head;
ListNode<T>* tail;
};
void InitLinkedList(LinkedList* list) {
list->head = new ListNode<T>;
list->tail = new ListNode<T>;
________________________________ // 在此处填入代码
};
- A. 1 list->head->prev = list->head; 2 list->tail->prev = list->head;
- B. 1 list->head->next = list->tail; 2 list->tail->prev = list->head;
- C. 1 list->head->next = list->tail; 2 list->tail->next = list->head;
- D. 1 list->head->next = list->tail; 2 list->tail->next = nullptr;
正确答案:B