在双向链表中,插入操作会影响多少个指针?
In a doubly linked list, How many pointers are affected on an insertion operation?
我昨天面试了。开始时,面试官问的第一件事是
" 在双向链表中,一次插入操作会影响多少个指针?"
因为他没有具体问在哪里插入我回答说这取决于DLL中有多少个节点。
因为受影响的指针总数将取决于列表是否为空以及插入发生的位置。
但是,不管我有没有说服他,他都没有说。
我是对的还是我漏掉了什么?
我认为答案取决于我们是将新节点插入列表的中间(被两个节点包围),还是在列表的头部或尾部。
对于链表中间的插入,拼接一个新节点如下:
A --- B
^^ splice M in here
A.next = M
M.prev = A
B.prev = M
M.next = B
因此发生了四次指针赋值。但是,如果插入在头部或尾部,那么只需要两次指针赋值:
TAIL (insert M afterward)
TAIL.next = M
M.prev = TAIL
我昨天面试了。开始时,面试官问的第一件事是
" 在双向链表中,一次插入操作会影响多少个指针?"
因为他没有具体问在哪里插入我回答说这取决于DLL中有多少个节点。
因为受影响的指针总数将取决于列表是否为空以及插入发生的位置。
但是,不管我有没有说服他,他都没有说。
我是对的还是我漏掉了什么?
我认为答案取决于我们是将新节点插入列表的中间(被两个节点包围),还是在列表的头部或尾部。
对于链表中间的插入,拼接一个新节点如下:
A --- B
^^ splice M in here
A.next = M
M.prev = A
B.prev = M
M.next = B
因此发生了四次指针赋值。但是,如果插入在头部或尾部,那么只需要两次指针赋值:
TAIL (insert M afterward)
TAIL.next = M
M.prev = TAIL