// MT1Q6.cpp #include template class Node { public: Node(Node* pNode, const T& t=0) : next_(pNode), t_(t) {}; T& value() { return t_; } Node*& next() { return next_; } // Compiler generated copy and assignment are shallow. // That makes sense for a Node class. private: Node* next_; T t_; }; template void walkList(Node* pNode) { std::cout << "\n " << pNode->value(); if(pNode->next() != 0) walkList(pNode->next()); } void main() { Node n0(0,4); Node n1(&n0,3); Node n2(&n1,2); Node n3(&n2,1); Node n4(&n3,0); walkList(&n4); std::cout << "\n\n"; // bypass node 2 n3.next() = &n1; walkList(&n4); std::cout << "\n\n"; }