我试图创建一个插入方法,其中参数是指向前一个节点的指针。然而,我的植入有缺陷。
只有在插入test.insert(n2->_next, 4);
时才有效,但这不是前一个指针?如果调用test.insert(n2, 4);
,则未插入节点?
谁能告诉我哪里弄错了?
方法(类LLToolkit的一部分):
void insert(Node<t>* &prevPtr, t data)
{
if (prevPtr == nullptr) return;
prevPtr->_next = new Node<t>(data, prevPtr->_next);
}
void headInsert(Node<t>* &headPtr, t data)
{
headPtr = new Node<t>(data, headPtr);
}
节点
template<typename t>
class Node
{
public:
Node()
{
_next = nullptr;
_data = data();
}
Node(t data = t(), Node<t>* next = nullptr) : _next(next), _data(data) {}
~Node(){ cout << "delete " << _data << _next << endl; }
Node<t> *_next;
t _data;
};
我的测试:
int main()
{
LLToolkit<int> test;
Node<int>* n1 = new Node<int>(1, nullptr);
Node<int>* n2 = new Node<int>(2, n1);
Node<int>* n3 = new Node<int>(3, n2);
test.headInsert(n1, 1);
test.headInsert(n2, 2);
test.headInsert(n3, 3);
// Order is now 3 - 2 - 1
// Should insert new node after n2
// Like this 3 - 2 - 4 - 1
test.insert(n2, 4);
return true;
}
行为如下
此处灰色标记处应插入新节点。
应该像下面那样工作
答案 0 :(得分:2)
按照您的代码,您似乎正在执行以下操作。
创建一个值为1的新节点和一个空的下一个指针。
Node<int>* n1 = new Node<int>(1, nullptr);
<强>结果:强>
n1(=1) -- nullptr
创建一个值为2的新节点和一个指向n1
的下一个指针。
Node<int>* n2 = new Node<int>(2, n1);
<强>结果:强>
n2(=2) -- n1(=1) -- nullptr
创建一个值为3的新节点和一个指向n2
的下一个指针。
Node<int>* n3 = new Node<int>(3, n2);
<强>结果:强>
n3(=3) -- n2(=2) -- n1(=1) -- nullptr
创建一个值为3的新节点,指向n1
的下一个指针,然后将n1
更改为指向新节点。
test.headInsert(n1, 1);
<强>结果:强>
n1(=1)
|
|
n3(=3) -- n2(=2) -- nn1(=1) -- nullptr
对n2
和n3
执行相同操作:
<强>结果:强>
n3(=3) n2(=2) n1(=1)
| | |
| | |
nn3(=3) -- nn2(=2) -- nn1(=1) -- nullptr
在n2
之后插入4。
<强>结果:强>
n3(=3) n2(=2) n1(=1)
| | |
| nn4(=4) |
| | |
nn3(=3) -- nn2(=2) -- nn1(=1) -- nullptr
所以问题是,这真的是你想要的吗?对不起,如果我误解了你的代码,如果我不能在这里编译它会很难。