-1

请看下图

在此处输入图像描述

这就是我实现它的方式

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 代表链表中的链接。我怀疑这是否也是“链接”类。Next 是指向列表中下一个武器的指针。如果它影响上述代码,我将其发布在这里。

在此处输入图像描述

方法里面怎么处理insert()?除此之外,我的链接列表是否正确?无论如何,第一次使用链接列表的模板。请帮忙!

注意:不允许内置数据结构。这就是我发布课程图的原因。如果我需要内置数据结构支持,那么我不会问如何自己构建代码。

4

1 回答 1

0

我宁愿回答的问题:

我的特殊问题/练习是....

我如何使用std::list或其他一些标准库容器来解决我的问题,这些容器可能会使用更少的行,更容易理解,更有效率并帮助我作为程序员实现更多目标?

我努力不回答的未说出口的问题:

我的代码有什么问题?

我认为您实际上在问的问题:

如何修复我的insert()方法?

只回答最后一个问题:

您似乎正在尝试将新链接附加到列表的前面。从概念上讲,我会将它附加到列表的后面,但是,嘿,每个人都有自己的。

问题在于类型:在您的类中,您的类型firstT *,其中T可能是一些实现的自定义类GetData()。所以first指向 a T,它应该可能指向 a Linkwhich 指向 a T

然后你的insert()方法更有意义。

尽管如此,如果没有一段具有定义预测输出的可编译代码,真的很难知道你的代码是否正确。至少对于标准库,您总是可以假设如果有问题,它不在链表实现中。

你需要自己做,因为它是家庭作业吗?

于 2013-02-27T12:51:05.230 回答