【发布时间】:2015-10-28 04:28:16
【问题描述】:
我正在使用一个双向链表,我想使用一个指向列表中最后一个节点的指针,所以我可以从末尾开始遍历。正如您在我的插入函数代码中看到的那样,我在最后遍历整个链表来设置最后一个指针。有一个更好的方法吗?我觉得使用这种方法可能会浪费资源。
void LinkedList::insert(ElementType dataVal, int index)
{
if (index < 0 || index > mySize)
{
cerr << "Illegal location to insert -- " << index << endl;
return;
}
Node * newPtr = new Node(dataVal);
Node * predPtr = first;
if (index == 0)
{
newPtr->next = first;
first = newPtr;
if(newPtr->next != NULL){
predPtr->next->prev = newPtr;
}
}
else
{
for(int i = 1; i < index; i++)
predPtr = predPtr->next;
newPtr->prev = predPtr;
newPtr->next = predPtr->next;
if(newPtr->next != NULL){
predPtr->next->prev = newPtr;
}
predPtr->next = newPtr;
}
mySize++;
Node * lastPtr = first;
while(lastPtr->next != NULL){
lastPtr = lastPtr->next;
}
last = lastPtr;
}
【问题讨论】:
-
一般情况下,您在创建列表时设置
head->next = tail和tail->prev = head。 -
@JonnyHenly 我是在构造函数中还是在这个函数中这样做?
-
而不是遍历整个列表来设置要插入的元素的最后一个指针检查索引。如果它在末尾,只需将最后一个指针指向新指针,否则保持最后一个指针不变。