用vs2010,为什么一运行就停止运行?

#include"ListNode.h"#include<iostream>usingnamespacestd;classList{public:intRemove(in... #include "ListNode.h"
#include<iostream>
using namespace std;

class List {
public:
int Remove(int i);
ListNode *Find(int i);
int Insert(int e,int i);
ListNode* Createlist();//创建链表
void Bianli(ListNode* p);//链表遍历
int ListLength()const;//求链表长度
void ListEmpty();//将链表置空
List(){head=tail=new ListNode;}//构造函数
virtual ~List(){ListEmpty(); delete head;}//析构函数
private:
ListNode * head,*tail;
};
void List::ListEmpty()
{ //将链表置为空表
ListNode *q;
while(head->next!=NULL)
{
q=head->next;
head->next=q->next;
delete q;
}
tail=head;
}
int List::ListLength() const
{
ListNode *p=head->next;
int count=0;
while(p!=NULL){p=p->next; count++;}
return count;
}
ListNode* List::Createlist()
{
ListNode* p=head->next;int n;
cout<<"请输入链表最大长度:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
p=new ListNode;
cout<<"输入链表元素"<<(i+1)<<endl;
cin>>p->data;
p=p->next;
}
return p;
}
void List::Bianli(ListNode* q)
{
q=head->next;
for(int j=0;j<2;j++)
{
cout<<"遍历链表:"<<endl;
cout<<"链表元素"<<(j+1)<<q->data<<endl;
q=q->next;
}

}
int main()
{
List L;
ListNode* q;
q=L.Createlist();
L.Bianli(q);
return 0;
}
主要是单向链表的创建和遍历。
展开
 我来答
百度网友b27e54b2d
2012-06-05 · TA获得超过459个赞
知道小有建树答主
回答量:161
采纳率:66%
帮助的人:149万
展开全部
ListNode* p=head->next;int n;
cout<<"请输入链表最大长度:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
p=new ListNode;
cout<<"输入链表元素"<<(i+1)<<endl;
cin>>p->data;
p=p->next;
}
上面是你写的创建链表的程序,开始p 是指向头结点,然后你创建的时候用p去创建就错了,
p=new ListNode;这句话的意思是创建一个新的结构体,然后让p指向它,而头结点那什么事都没发生;一般创建新的结点都是用p->next去创建新的结点,这样创建出的结点才能跟链表连起来,
还有,既然声明了头结点的私有成员变量,创建链表函数不需要返回值,每次都从head开始访问就行了,下面是我写的
void List::Createlist()
{
ListNode* p=head->next;
int n;
cout<<"请输入链表最大长度:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
if(head == NULL)
{
head = new ListNode;
p = head;
}
else
{
p->next = new ListNode;
p = p->next;
}
p->data = 1;
}
}
还有遍历链表是用while循环,不是for循环,因为大部分情况你不知道链表有多长
下面是我写的
void List::Bianli()
{
ListNode *pTemp = head;
int j = 1;
cout<<"遍历链表:"<<endl;
while(pTemp != NULL)
{
cout<<"链表元素"<<j<<" "<<pTemp->data<<endl;
j++;
pTemp = pTemp->next;
}
}
更多追问追答
追问
按你说的做了 可还行停止工作了 为什么呀 谢谢了
追答
sorry,少写点在创建的时候一定要在p->data = 1;后面加上这句  p->next = NULL;不然后面循环到尾结点的时候,不会跳出循环
时筠溪Uu
2012-06-05 · TA获得超过159个赞
知道答主
回答量:103
采纳率:0%
帮助的人:58.4万
展开全部
嗯 ListNode* p=head->next这里的指针P不能直接赋值,单链表是有各个节点组成的 每个节点相当于一个空间 所以在你定义指针P的时候要给它一个空间
比如 我定义节点
typedef struct node
{
char data;
struct node *next;
}LinkList;
LinkList *create()
{
LinkList *head,*last,*p;
p=(LinkList *)malloc(sizeof(LinkList)); //就是这句 给p分配一个你定义节点的空间
head=p;
下面代码略..........
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HUsterFisher
2012-06-05 · TA获得超过136个赞
知道答主
回答量:134
采纳率:0%
帮助的人:97.3万
展开全部
创建的话,
ListNode* List::Createlist()
{
ListNode* p=head->next;int n;
cout<<"请输入链表最大长度:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
p=new ListNode;
cout<<"输入链表元素"<<(i+1)<<endl;
cin>>p->data;
p=p->next;
}
return p;
}
不知道你的ListNode;是什么情况,不过你的p->next要是没赋值的话,这里的循环完之后应该执行
p = NULL;的
然后遍历的时候写成
p = head->next;
while( p )
{
cout << p->data << endl;
p = p->next;
}
追问
class List;
class ListNode
{
friend class List;
public:
ListNode *DeleteAfter();
ListNode * CreatNode(const int & e,ListNode *next);
void InsertAfter(ListNode *p);
ListNode * NextNode();
ListNode(){next=NULL;data=0;}
virtual ~ListNode(){ }
private:
ListNode * next;
int data;
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式