c++链表指针

2025-05-21 09:39:10
推荐回答(5个)
回答(1):

你是在逆序建链表的时候指针指错地方了!
#include
#include "malloc.h"
struct Node{
int data;
Node *next;
};

void create(Node *L)
{
Node *p,*q;
q = L; //q指针指向头
int nData ;
do
{
cin>>nData;
if (nData == -1)break;
p=new Node;
p->data=nData;
p->next=NULL;

//逆序输出的做法
//////////////////////////////////////////////////////////////////////////
p->next = q->next;
q->next = p;
//////////////////////////////////////////////////////////////////////////

//按顺序输出的做法
//////////////////////////////////////////////////////////////////////////
//if(L==NULL)
//L = p;
//else
//q->next=p;
//q=p;
//////////////////////////////////////////////////////////////////////////
}while(nData!=-1);
}
void print(Node*L)
{
Node*p;
p = L->next;
while(p)
{
cout<data<p=p->next;
}
cout<}
int main()
{
Node L;
L.data=0;
L.next=NULL;
create(&L); //头结点传递
print(&L);
return 0;
}

回答(2):

#include
#include "malloc.h"
struct Node{
int data;
Node * next;
};
void create(Node *L){
Node *p,*q=L;
//L= new Node; L已经指向了一个节点为何又另外new一个?

//int i=0; i用来做什么?
//Node *q=new Node; 此处q指向了一个节点你用来做什么呢?
int nData=100;
while(true){
// /*

cin>>nData;
if(-1==nData)
break;
p=new Node;
p->data=nData;
p->next=NULL;

//逆序输出的做法
//逆序做法你是在插入的时候将新的节点始终插入到头结点后面而实现逆序的嘛?
//如果是就是下面这样
p->next=L->next;
L->next=p;

// 按顺序输出的做法
// 传进来的L你在主函数里已经指向了节点没有必要在这里判断了!
//q->next=p;
//q=p;

//头结点可以用来记录节点的个数如果你想记录的话,这样:
//L->data++;
}
p=L->next;
while(p)
{
cout<data< p=p->next;
}
cout<}
int main(){
Node L;
L.data=0;
L.next=NULL;
Node *p ;

create(&L); //头结点传递
cout<<"**********"< p=L.next;

while(p){
cout<data< p=p->next;
}
cout< return 0;

}

回答(3):

#include
#include "malloc.h"
struct Node{
int data;
Node * next;
};
void create(Node * & L,int i){ /*这里用了Node * &类型,指针的引用,这样做是为了使L形参值的改变被保存下来*/
Node * p,*q;
L=new Node;
L->data=0;
L->next=NULL;
int nData=100;
while(nData!=-1 && i==0){
//逆序输出的做法
p=new Node;
p->data=nData;
p->next=L;
L=p;
cin>>nData;
}
q=p=new Node;
while(nData!=-1 && i!=0)
{
p->data=nData;
p->next=NULL;
if(L->next==NULL) L->next=p;
else q->next=p;
q=p;
p=new Node;
cin>>nData;
}
}
int main(){
int i;
Node *p,*L ;
cout << "要链表逆序输出0,否则输入1:"<cin>>i;
create(L,i); //头结点传递
cout<<"**********";
p=L;
while(p){
cout<data<<" ";
p=p->next;
}

return 0;

}

我修改了一些地方,但楼主的主要思想没有变。有一些错误我已经改过来了

回答(4):

输入-1后,p和L都指向表头。
紧接p->next = NULL;L = L->next;
这是L = NULL了,
则while(L->NEXT)报错,L是空指针。

回答(5):

node * L;
create(L);

直接利用指针