我正在使用双向链表,我想使用指向列表中最后一个节点的指针,因此我可以从最后开始遍历。正如我在代码中看到的insert函数,我在最后通过整个链表来设置最后一个指针。有一个更好的方法吗?我觉得我可能会使用这种方法浪费资源。
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;
}
答案 0 :(得分:0)
为什么不保留'last'指针而不先将其重新绑定? 有两个条件:
只需将最后几行更改为:
while(last->next != NULL) {
last = last->next;
}
更新
考虑添加第一个节点的情况,您应该将最后几行更改为:
if (last == NULL) {
last = first;
}
if (last->next != NULL) {
last = last->next;
}