新手创建单链表出错,望大虾指点

时间:2021-02-10 08:29:18
#include<iostream>
using namespace std;
void createlist();
struct list {
int num;
list * next;
};
list * head;

void createlist()
{
list * p;
list * end;
end =new list;
p=new list;
cout<<"echo 0 as end"<<endl;
cin>>p->num;
while(p->num!=0)
{
if(head->next==NULL){

   head->next=p;
   end=p->next;
}else{
end=p;
end=p->next;
   }
   p=new list;
   cin>>p->num;
}
end=NULL;
free(end);
}
int main()
{
head=new list;
head=NULL;
createlist();
 while(head->next!=NULL){
cout<<head->num;
head=head->next;
  }
return 1;
}
错误提示:No symbol "new" in current context.

13 个解决方案

#1


你什么编译器啊

#2


g++编译能通过,没报错!!!

#3


把list换个名字试试,和stl里的list关键字重名了

#4


还有你申请空间的操作有点问题

#include <iostream> 
using   namespace   std; 
void   createlist(); 
struct   list{ 
int   num; 
list*   next; 
}; 

list* head = NULL; 

void   createlist() 

list*   p   = new list; 
list*   end = NULL; 
cout << "echo   0   as   end " <<endl; 
cin >> p-> num; 
while(p->num != 0) 

p->next = NULL;
if(head == NULL)

head = end = p;
}
else

end ->next = p; 
end = p; 

p = new   list; 
cin >> p->num; 
}  


int   main() 

createlist(); 
    list* p = head;
list* tmp = NULL;
while(p != NULL)

cout << p-> num << " "; 
tmp = p->next;
// 释放
delete p;
p = tmp;
    } 
return   1; 


#5


谢谢LS的哈,我用的是linux下的eclipse,不知道为什么我这老报错!
程序有问题么?

#6


那是做java的吧?
做C++选择其他编译器比较好

#7


是啊,但下个插件也可以编译C++的,linux下还不知道怎么装g++呢!

#8


createlist里好像也有点问题吧,P一直在分配空间但P的地址又没有改变

#9


这是我以前写的一个链表的头文件,参考一下吧

#include<cstdlib>
#include<iostream>

using namespace std;

#define NULL 0

typedef int DataType;

typedef struct Node
{
DataType data;
struct Node *next;
}SLNode;

void ListInitiate(SLNode **head) //初始化链表
{
if((*head=new SLNode)==NULL)
exit(1);
(*head)->next=NULL;
}

int ListLength(SLNode *head) //获取长度
{
SLNode *p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}

int ListInsert(SLNode *head,int i,DataType x) //插入链表元素
{
SLNode *p,*q;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(j!=i-1)
{
cout<<"插入位置参数错误!"<<endl;
return 0;
}
if((q=new SLNode)==NULL)
exit(1);
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}

int ListDelete(SLNode *head,int i,DataType *x) //删除链表元素
{
SLNode *p,*s;
int j;
p=head;
j=-1;
while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(j!=i-1)
{
cout<<"删除位置参数错误!"<<endl;
return 0;
}
s=p->next;
*x=s->data;
p->next=p->next->next;
free(s);
return 1;
}

int ListGet(SLNode *head,int i,DataType *x) //取第I个元素,X用来保存
{
SLNode *p;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
cout<<"取元素位置参数错误"<<endl;
return 0;
}
*x=p->data;
return 1;
}

void ListDestroy(SLNode **head) //稍毁链表
{
SLNode *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}

void ListPrint(SLNode *head) //打印链表
{
SLNode *p;
p=head;
while(p->next!=NULL)
{
cout<<p->next->data<<endl;
p=p->next;
}
}

#10


上面的头文件#include<cstdlib>删掉吧,我是用C语言改过来的

#11


PcrazyC说的也有道理
createlist里好像也有点问题吧,P一直在分配空间但P的地址又没有改变
---------------------------------------------------
这个又该怎么解决呢?
还有createlist函数中的变量如p,end,他们都是局部变量,函数执行完之后会丢失吗?
由于刚学所以这些基础的东西还不是很清楚,希望达人帮忙

#12


像我在9楼的那样,将链表的初始化和插入写成各自的函数,HEAD这个指针用来代表这个链表

#13


但是,像ckt1120的程序也能出正确的结果..createlist函数中的变量如p,end,他们都是局部变量,函数执行完之后不会丢失吗?运行结果又是怎么样得来的呢? 
,P一直在分配空间但P的地址又没有改变,我已经晕掉了....

#1


你什么编译器啊

#2


g++编译能通过,没报错!!!

#3


把list换个名字试试,和stl里的list关键字重名了

#4


还有你申请空间的操作有点问题

#include <iostream> 
using   namespace   std; 
void   createlist(); 
struct   list{ 
int   num; 
list*   next; 
}; 

list* head = NULL; 

void   createlist() 

list*   p   = new list; 
list*   end = NULL; 
cout << "echo   0   as   end " <<endl; 
cin >> p-> num; 
while(p->num != 0) 

p->next = NULL;
if(head == NULL)

head = end = p;
}
else

end ->next = p; 
end = p; 

p = new   list; 
cin >> p->num; 
}  


int   main() 

createlist(); 
    list* p = head;
list* tmp = NULL;
while(p != NULL)

cout << p-> num << " "; 
tmp = p->next;
// 释放
delete p;
p = tmp;
    } 
return   1; 


#5


谢谢LS的哈,我用的是linux下的eclipse,不知道为什么我这老报错!
程序有问题么?

#6


那是做java的吧?
做C++选择其他编译器比较好

#7


是啊,但下个插件也可以编译C++的,linux下还不知道怎么装g++呢!

#8


createlist里好像也有点问题吧,P一直在分配空间但P的地址又没有改变

#9


这是我以前写的一个链表的头文件,参考一下吧

#include<cstdlib>
#include<iostream>

using namespace std;

#define NULL 0

typedef int DataType;

typedef struct Node
{
DataType data;
struct Node *next;
}SLNode;

void ListInitiate(SLNode **head) //初始化链表
{
if((*head=new SLNode)==NULL)
exit(1);
(*head)->next=NULL;
}

int ListLength(SLNode *head) //获取长度
{
SLNode *p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}

int ListInsert(SLNode *head,int i,DataType x) //插入链表元素
{
SLNode *p,*q;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(j!=i-1)
{
cout<<"插入位置参数错误!"<<endl;
return 0;
}
if((q=new SLNode)==NULL)
exit(1);
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}

int ListDelete(SLNode *head,int i,DataType *x) //删除链表元素
{
SLNode *p,*s;
int j;
p=head;
j=-1;
while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(j!=i-1)
{
cout<<"删除位置参数错误!"<<endl;
return 0;
}
s=p->next;
*x=s->data;
p->next=p->next->next;
free(s);
return 1;
}

int ListGet(SLNode *head,int i,DataType *x) //取第I个元素,X用来保存
{
SLNode *p;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
cout<<"取元素位置参数错误"<<endl;
return 0;
}
*x=p->data;
return 1;
}

void ListDestroy(SLNode **head) //稍毁链表
{
SLNode *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}

void ListPrint(SLNode *head) //打印链表
{
SLNode *p;
p=head;
while(p->next!=NULL)
{
cout<<p->next->data<<endl;
p=p->next;
}
}

#10


上面的头文件#include<cstdlib>删掉吧,我是用C语言改过来的

#11


PcrazyC说的也有道理
createlist里好像也有点问题吧,P一直在分配空间但P的地址又没有改变
---------------------------------------------------
这个又该怎么解决呢?
还有createlist函数中的变量如p,end,他们都是局部变量,函数执行完之后会丢失吗?
由于刚学所以这些基础的东西还不是很清楚,希望达人帮忙

#12


像我在9楼的那样,将链表的初始化和插入写成各自的函数,HEAD这个指针用来代表这个链表

#13


但是,像ckt1120的程序也能出正确的结果..createlist函数中的变量如p,end,他们都是局部变量,函数执行完之后不会丢失吗?运行结果又是怎么样得来的呢? 
,P一直在分配空间但P的地址又没有改变,我已经晕掉了....