1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
template <typename T>
struct Node
{
T m_info;
shared_ptr<Node<T>> m_next;
shared_ptr<Node<T>> m_prev;
shared_ptr<Node<T>> m_up;
shared_ptr<Node<T>> m_down;
Node<T> (): m_next(nullptr), m_prev (nullptr), m_up (nullptr), m_down(nullptr) {}
Node<T> (shared_ptr<Node<T>> next = nullptr, shared_ptr<Node<T>> prev = nullptr,
shared_ptr<Node<T>> up = nullptr, shared_ptr<Node<T>> down = nullptr)
: m_next (next), m_prev (prev), m_up (up), m_down(down) {}
Node<T> (T t, shared_ptr<Node<T>> next = nullptr, shared_ptr<Node<T>> prev = nullptr,
shared_ptr<Node<T>> up = nullptr, shared_ptr<Node<T>> down = nullptr)
: m_info (t), m_next (next), m_prev (prev), m_up (up), m_down(down) {}
};
template <typename T>
struct List
{
shared_ptr<Node<T>> m_topLeft;
shared_ptr<Node<T>> m_topRight;
shared_ptr<Node<T>> m_bottomLeft;
shared_ptr<Node<T>> m_bottomRight;
List () : m_topLeft (nullptr), m_topRight (nullptr), m_bottomLeft (nullptr), m_bottomRight (nullptr) {}
//now think of the usual methods that a oneD LL has and try and come up with their twoD counterparts
//Good luck!
}
|