我正在为我的大学作业编写一个循环列表类,我需要实现一个从循环链表中删除给定索引处的节点并返回指向该节点的指针的函数。
这是我的节点类。所有功能都可以正常工作。
struct Node
{
int nData;
Node* next;
Node(); // Null Constructor
Node(int data); // Parameterized Constructor
Node(Node& newNode); // Copy constructor
~Node(); // Destructor
Node& Print(); // display function
};
这是我的节点删除功能。
Node* CCircleList::removeAt(int index) // remove node at specified index
{
if (index < 0)
{
index = 0;
}
if (index == 0)
{
return remove();
}
else if (index >= count)
{
demoteIndex(); // tail points to it's predecessor
Node* ptr = tail->next;
tail->next = ptr->next;
ptr->next = NULL;
setPosition(0);
return ptr;
}
else if (index = (count - 1))
{
promoteIndex(); // tail points to tail->next
setPosition(index - 1); // sets Node pointer current to index
Node* ptr = current->next;
promoteIndex();
current->next = ptr->next;
ptr->next = NULL;
return ptr;
}
else
{
setPosition(index - 1);
Node* ptr = current->next;
current->next = ptr->next;
ptr->next = NULL;
return ptr;
}
}
count =列表中的节点数。
tail =列表中的最后一个节点。
tail-&gt; next =列表中的第一个节点。
该功能适用于除count-1之外的所有索引,任何帮助都将受到赞赏。提前谢谢。
其他功能代码
CCircleList& CCircleList::promoteIndex() // tail points to it's successor
{
if (!tail) return *this;
tail = tail->next;
return *this;
}
CCircleList& CCircleList::demoteIndex() // tail points to it's predecessor
{
if (!tail) return *this;
for (int i = 1; i <= count - 1; i++)
{
tail = tail->next;
}
return *this;
}
CCircleList& CCircleList::setPosition(int index) // set current to specified index
{
if (index < 0) index = 0;
if (index >= count) index = count - 1;
current = tail->next;
for (int i = 0; i < index; ++i)
{
current = current->next;
}
return *this;
}
答案 0 :(得分:1)
而不是
else if (index = (count - 1))
试
else if (index == (count - 1))