简体   繁体   中英

How can I create linked lists within a linked list?

I'm creating a game of snake in C++, but I'm having some trouble utilizing my linkedList class that I've created. When I made snake in Python, I made lists within a list to represent the x and y position of each circle that makes up my snake. I am trying to do something similar in C++. Here is my templatized linkedList class I made if for some reason you need to see it:

#ifndef LLIST_H_INCLUDED
#define LLIST_H_INCLUDED
#include <cstddef>
#include <iostream>

using namespace std;

template <class T>
class linkedList
{
public:
    class node
    {
    public:
        ///node class attributes
        T mPayload;
        node* mNext;
        ///constructor
        node(T toucan):mPayload(toucan),mNext(NULL)
        {}
        ///destructor
        ~node()
        {
            ///cascading delete
            if(mNext)
                delete mNext;
        }
        ///node class methods
    };

    ///linkedList class attributes
    node* mStart;
    ///constructor
    linkedList():mStart(NULL)
    {}
    ///destructor
    ~linkedList()
    {
        ///initializes the cascading delete.
        if(mStart)
            delete mStart;
    }
    ///linkedList class methods
    T mReturnT(int indx)
    {
        if(!mStart)
            return NULL;
        else
        {
            node* cur;
            for(int i = 0; i<indx; i++)
            {
                if(!cur->mNext)
                {
                    cout << "Indx out of range. Deleting last item." << endl;
                    break;
                }
                cur = cur->mNext;
            }
            delete cur;
            return cur->mPayload;
        }
    }

    void mInsert(int indx, T data)
    {
        ///Insert an item at a given position.
        ///The first argument is the index of
        ///the element before which to insert.
        node* cur = mStart;
        for(int i = 0; i < indx; i++)
        {
            if(!cur->mNext)
                break;
            else
            {
                cur = cur->mNext;
            }
        }
        node* N = new node(data);
        node* temp = cur->mNext;
        cur->mNext = N;
        N->mNext = temp;
    }

    T mPop()
    {
        ///Removes the last item in the list,
        ///and returns it.
        if(!mStart)
            return NULL;
        else
        {
            node* cur = mStart;
            while(cur->mNext)
            {
                cur = cur->mNext;
            }
            T var = cur->mPayload;
            delete cur;
            return var;
        }
    }

    int mSize()
    {
        if(!mStart)
            return 0;
        else
        {
            node* cur = mStart;
            int counter = 1;
            while(cur->mNext)
            {
                cur = cur->mNext;
                counter++;
            }
            delete cur;
            return counter;
        }
    }
    void mPrint()
    {
        ///prints all values in a list.
        node* cur;
        if(!mStart)
            cout << "List is empty." << endl;
        else
        {
            cur = mStart;
            cout << "[";
            while(cur)
            {
                cout << cur->mPayload << " ";
                cur = cur->mNext;
            }
            cout << "]" << endl;
            delete cur;
        }
    }
    void swapNodes(node* N)
    {
        ///idk
    }
    void bubbleSort()
    {
        if(!mStart)
            return;
        node* cur = mStart;
        while(cur)
        {
            cout << cur->mPayload << endl;
            if(cur->mRight->mFrequency > cur->mFrequency)
            {
                swapNodes(cur);
                cur = mStart;
            }
            else
                cur = cur->mRight;
        }
        delete cur;
    }

};

#endif // LLIST_H_INCLUDED

Now in my main.cpp, I would like to do something like this so that I have a linked list of linked lists:

linkedList<linkedList> p1Snake;
linkedList<int> startingPiece;
startingPiece.mInsert(0,600); //This is the starting y position of
                      // p1snake added to the front of the list.
startingPiece.mInsert(0,350); //This is the starting x position of 
                      //p1snake added to the front of the list.
p1Snake.mInsert(0,startingPiece);

My problem arises on the first line of that code. Error: type/value mismatch at argument 1 in template parameter list for 'template class class linkedList. How can I solve this?

This needs to be a linked list of a linked list of something :

linkedList<linkedList> p1Snake;

Something along these lines:

linkedList< linkedList< something > > p1Snake;

Your lnkedList class has 1 templatized type T , so the syntax of variable definition should be:

linkedList<type> variableName;

by recursion, type can be linkedList , but it should still be in above form (there is type ). So for example if the last data type is int :

linkedList<linkedList<int> > variableName;

您可能需要参考标题为“链接列表模板和二进制搜索树”的文章: http : //www.cplusplus.com/forum/articles/40773/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM