C ++单链接列表插入?

时间:2016-09-02 15:34:40

标签: c++ pointers linked-list singly-linked-list

我试图创建一个插入方法,其中参数是指向前一个节点的指针。然而,我的植入有缺陷。

只有在插入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;
}

行为如下

enter image description here

此处灰色标记处应插入新节点。

应该像下面那样工作

enter image description here

1 个答案:

答案 0 :(得分:2)

按照您的代码,您似乎正在执行以下操作。

  1. 创建一个值为1的新节点和一个空的下一个指针。

    Node<int>* n1 = new Node<int>(1, nullptr);
    

    <强>结果:

    n1(=1) -- nullptr
    
  2. 创建一个值为2的新节点和一个指向n1的下一个指针。

    Node<int>* n2 = new Node<int>(2, n1);
    

    <强>结果:

    n2(=2) -- n1(=1) -- nullptr
    
  3. 创建一个值为3的新节点和一个指向n2的下一个指针。

    Node<int>* n3 = new Node<int>(3, n2);
    

    <强>结果:

    n3(=3) -- n2(=2) -- n1(=1) -- nullptr
    
  4. 创建一个值为3的新节点,指向n1的下一个指针,然后将n1更改为指向新节点。

    test.headInsert(n1, 1);
    

    <强>结果:

                       n1(=1)
                         |
                         |
    n3(=3) -- n2(=2) -- nn1(=1) -- nullptr
    
  5. n2n3执行相同操作:

    <强>结果:

    n3(=3)     n2(=2)     n1(=1)
      |           |         |
      |           |         |
    nn3(=3) -- nn2(=2) -- nn1(=1) -- nullptr
    
  6. n2之后插入4。

    <强>结果:

    n3(=3)     n2(=2)     n1(=1)
      |           |         |
      |         nn4(=4)     |
      |           |         |
    nn3(=3) -- nn2(=2) -- nn1(=1) -- nullptr
    
  7. 所以问题是,这真的是你想要的吗?对不起,如果我误解了你的代码,如果我不能在这里编译它会很难。