如何在链表的前面添加元素?

时间:2015-11-25 00:21:01

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

这是节点的设置方式:

struct Node {
    Node *next;
    Node *prev;
    T datum;
};

这是我的代码

    //MODIFIES: this
    //EFFECTS:  inserts i into the front of the list
    void push_front(const T &datum)
    {
        Node newfirst = first; // set newnode to first
        &first = &datum;
        datum = newfirst;

    }



  Node *first;   // points to first Node in list, or 0 if list is empty
  Node *last;    // points to last Node in list, or 0 if list is empty

出于某种原因,我认为这是对的。

2 个答案:

答案 0 :(得分:1)

您似乎需要以下

//this is my code
    //MODIFIES: this
    //EFFECTS:  inserts i into the front of the list
void push_front(const T &datum)
{
    first = new Node { first, nullptr, datum };

    if ( !last ) last = first;
}

如果您的编译器不支持new new的初始化列表,那么您可以编写

//this is my code
    //MODIFIES: this
    //EFFECTS:  inserts i into the front of the list
void push_front(const T &datum)
{
    Node *tmp = new Node();

    tmp->datum = datum;
    tmp->next = first;

    first = tmp;

    if ( !last ) last = first;
}

答案 1 :(得分:0)

您希望(i)创建具有有效内容的新节点,并且(ii)设置为列表的第一个节点。您可以在以下示例中执行此操作:

void push_front(const T &datum)
{
    Node* newFirst = new Node;  //construct new Node
    newFirst->next = first;     // set newFirst's next node
    newFirst->datum = datum;   //set the content
    first = newFirst;          //assign new first node;
}

这就像一幅素描;有关更多详细信息,您应该发布更多代码(例如在其中一条评论中提到)。

另外需要提及的是:我更倾向于使用unique_ptr作为其中一个Node指针,例如。

struct Node {
    std::unique_ptr<Node> next;
    Node *prev;
    T datum;
};

这可以很容易地破坏列表(并且还避免使用现代C ++中经常推荐的new命令。)