C++ Singly Linked List - Deque - InsertFront()



我试图实现一个insertfront()函数为我的单列表deque,但我一直遇到这个相同的问题。

我认为这是由于操作符=

的重载。

Deque& operator=(const Deque&){return *this;};

对于赋值工作,它要求操作数A是Deque类型的引用,操作数B是Deque类型的另一个引用,但我不确定如何去实现这一点,因为我试图做head&= new_node&而且会犯更多的错误。

Deque.cpp||In member function 'void Deque::insert_front(int)':|
Deque.cpp|21|error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Node; _Dp = std::default_delete<Node>]'|
/usr/include/c++/6/bits/unique_ptr.h|357|note: declared here|

这是我的函数

#include "Deque.h"
#include <iostream>
#include <memory>
#include <utility>
using std::cout;
using std::endl;
using std::move;
void Deque::insert_front(int a)
{
    std::unique_ptr<Node> new_node;
    new_node->val = move(a);
    new_node->next = move(head);
    head = move (new_node);
}

Deque.h

#include "Node.h"
#include <memory>
class Deque{
    public:
        Deque() = default;
        Deque(const Deque&);
        ~Deque(); //must use constant space
        Deque& operator=(const Deque&){return *this;};
        void insert_front(int); 
    private:
    friend Node;
        //Sentinel
        std::unique_ptr<Node> head ;
        std::unique_ptr<Node> tail ;
};

Node.h

#ifndef NODE_H
#define NODE_H
#include <iostream>
#include <memory>
class Node {
 public:
 Node(const Node& n) : val{n.val}, next{}
  {
  }
 Node(int v, std::unique_ptr<Node> n) : val{v}, next{move(n)}
  {
  }
 Node(int v) : val{v}
  {
  }
 private:
  int val = 0;
  std::unique_ptr<Node> next = nullptr;
  friend class Deque;
  friend std::ostream& operator<<(std::ostream&, const Node&);
};
#endif

在insertAtFront函数中,基本上很容易,在创建节点后,我们必须检查列表是否为空,所以我们可以通过头节点检查,如果它是空的,那么节点是空的,否则不是。如果head不为空,则在新节点的下一个指针中分配第一个节点的地址。然后我们必须更新head,所以我们将新创建的节点地址分配给head。

#include<iostream>
using namespace std;
//Node structure
struct node{
    int data;
    node* next;
};
//This pointer will always point first node
node* head = NULL;
//Function to add node at the front of the linked list
void insert_at_front(){
    node* t = new node;
    cout << "Enter the data in the node :";
    cin >> t->data;
    t->next = NULL;
    if(head == NULL){
        head = t;
    }
    else{
        //After adding the new node to the existing linked list 
        //then we have to modify the head pointer  
        t->next = head;
        head = t;
    }
    numberOfNodes++;
}
}

相关内容

  • 没有找到相关文章

最新更新