链表:"node*head = new node"和"node*head"之间的区别

use*_*692 5 c++

我正在创建一个由用户输入的大小为n的链接列表.当我刚刚初始化标题时,输出是完美的但是当我声明它时输出也有两个零附加.

对于size = 5如果我写node*head = new node; 输出是432100,如果我只写节点*头输出是43210.为什么?

/* I am creating a link list of size n entered by user
 * File:   main.cpp
 * Author: neha
 *
 * Created on February 2, 2014, 12:39 AM
 */

#include <cstdlib>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;

/*
 * 
 */
using namespace std;
struct node{
    int data;
    node* next;
};
node* head=new node; //<--------------here
void PushFront(int value) //Inserting nodes at front of link list
{
    node* newNode= new node;
    newNode->data=value;
    newNode->next=head;
    head=newNode;

}

void Print() //printing the inserted nodes
{
    node* temp= new node;
    temp=head;


    while(temp!=NULL)
    {
        cout<< temp->data;
        temp=temp->next;
    }
}

int main()
{
int size,i;
cout<<"Enter size of linked list"<<endl;//Asking user to enter the size of linklist
cin>>size;
for(i=0;i<size;i++)
{
PushFront(i);
}

Print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

bar*_*nos 1

如果您只是声明node* head,则 的值head是未定义的(“垃圾”),您应该避免使用它。

您的代码中的另一个问题位于:

node* temp= new node;
temp=head;
Run Code Online (Sandbox Code Playgroud)

不确定你想通过设置temp = something然后做什么temp = something else。显然,第一个分配是无用的,因为它被第二个分配覆盖了。在这种特定情况下,它会导致您的程序出现内存泄漏,因为您“丢失”了动态分配的内存指针。