请查看下图
这就是我实施它的方式
template <typename T>
class LinkedList
{
struct Link {
T data;
struct Link *next;
public:
T *first;
};
LinkedList::LinkedList(void)
{
first = 0;
}
LinkedList::~LinkedList(void)
{
}
bool LinkedList::IsEmpty()
{
return (first==0);
}
void LinkedList::Insert(Link *newLink)
{
newLink->next = first;
first = newLink;
}
void LinkedList::Display()
{
Link *current = first;
while(current!=0)
{
current->Display();
current = current->next;
}
}
T *LinkedList::Find(int value)
{
Link *current = first;
while(current->GetData()!=value)
{
if(current->next==0)
{
return 0;
}
else
{
current = current->next;
}
}
return current;
}
T *LinkedList::Delete(const int id)
{
Link *current = first;
Link *previous = first;
while(current->GetData()!=id)
{
if(current->next==0)
{
return 0;
}
else
{
previous = current;
current = current->next;
}
}
if(current==first)
{
first = first->next;
}
else
{
previous->next = current->next;
}
return current;
}
};
我对我的实施感到不舒服。特别是,我不知道使用insert()
类型在T
方法中要做什么。
以下是另一个类的图表,它的next
指针是Weapons表示链表中的链接。我怀疑这是否也是“链接”类。接下来是指向列表中下一个武器的指针。如果它影响上面的代码,我在这里发布。
如何处理insert()
方法?除此之外,我的链接列表是否正确?首次使用链接列表模板。请帮忙!
注意:不允许在数据结构中内置。这就是我发布课程图的原因。如果我需要在数据结构支持中建立,那我就不会问我如何按自己的方式构建代码。
答案 0 :(得分:0)
我宁愿回答的问题:
我的特殊问题/运动是......
如何使用std::list
或其他标准库容器来解决我的问题,这些容器可能会使用更少的行,更容易理解,更高效并帮助我实现程序员更多?
我努力不回答的未说出口的问题:
我的代码出了什么问题?
我认为你实际问的问题是:
如何修复insert()
方法?
仅回答上一个问题:
您似乎正在尝试将新链接附加到列表的前面。从概念上讲,我会把它附加到列表的后面,但是嘿,每个都是他自己的。
类似于:在您的课程中,first
的类型为T *
,其中T
可能是实现GetData()
的自定义类。因此first
指向T
,它应该指向Link
,指向T
。
然后你的insert()
方法更有意义。
但是,如果没有可编译的代码片段(具有已定义的预测输出),则很难知道您的代码是否正确。至少对于标准库,您总是可以假设如果出现问题,它不在链表实现中。
你是否需要自己做,因为这是家庭作业?