Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在链表前面添加新节点时出现问题_C++_List_Reference_New Operator_Singly Linked List - Fatal编程技术网

C++ 在链表前面添加新节点时出现问题

C++ 在链表前面添加新节点时出现问题,c++,list,reference,new-operator,singly-linked-list,C++,List,Reference,New Operator,Singly Linked List,我试图在链表的开头添加一个新节点。因此,新添加的节点将成为链表的新头,而链表的前一头将成为第二个节点。 这是我的密码: #include <iostream> #include <iomanip> class Node { public : int data ; Node * next ; } ; void printNodes(Node * node) ; voi

我试图在链表的开头添加一个新节点。因此,新添加的节点将成为链表的新头,而链表的前一头将成为第二个节点。 这是我的密码:

    #include <iostream>
    #include <iomanip>

    class Node
    {
        public :
        int data ;
        Node * next ;
    } ;

    void printNodes(Node * node) ;
    void pushFront(Node * headReference, int newNode) ;

    int main()
    {
         Node * head = NULL,
         * second = NULL,
         * third = NULL ;

         head = new Node() ;
         second = new Node() ;
         third = new Node() ;

         head -> data = 1 ;
         head -> next = second ;

         second -> data = 2 ;
         second -> next = third ;

         third -> data = 3 ;
         third -> next = NULL ;

         pushFront(head, 4) ;
         printNodes(head) ;

         return 0 ;
   }

   //Printing the linked list nodes.
   void printNodes(Node * node)
   {
        int counter = 0 ;

        while(node != NULL)
        {
             ++ counter ;
             std::cout << "Node " << std::setfill('0')
                       << std::setw(2)
                       << counter
                       << " --> "
                       << node -> data
                       << std::endl ;

             node = node -> next ;
        }

        std::cout << "Linked List finished" << std::endl ;
   }

   //Inserting a new node on the front of the list.
   void pushFront(Node * headReference, int newData)
   {
        Node * newNode = new Node() ;

        newNode -> data  = newData ;

        newNode -> next = headReference ;

        headReference = newNode ;
   }
#包括
#包括
类节点
{
公众:
int数据;
节点*下一步;
} ;
无效打印节点(节点*节点);
void pushFront(节点*头参照,int newNode);
int main()
{
节点*head=NULL,
*第二个=空,
*第三个=空;
头=新节点();
第二个=新节点();
第三个=新节点();
头部->数据=1;
头->下一个=秒;
第二->数据=2;
第二->下一个=第三个;
第三->数据=3;
第三->下一步=空;
前推(头部,4);
打印节点(头);
返回0;
}
//打印链接列表节点。
无效打印节点(节点*节点)
{
int计数器=0;
while(节点!=NULL)
{
++计数器;
标准:cout 3

链接列表已完成

我得到的结果是:

节点01-->1

节点02-->2

节点03-->3


链接列表已完成

您必须通过引用传递头部节点。例如

   void pushFront( Node * &headReference, int newData )
   {
        headReference = new Node { newData, headReference };
   }
否则,函数将处理头节点的副本。在函数中更改副本不会影响原始头节点的值

另一种方法是C方法,通过引用传递意味着通过指针传递对象

   void pushFront( Node * *headReference, int newData )
   {
        *headReference = new Node { newData, *headReference };
   }
可称为

pushFront( &head, 4 );