这个循环链表有错,请教怎么改?先谢谢了

来源:百度知道 编辑:UC知道 时间:2024/06/14 07:56:49
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}SLink;

/******initialize a list********/
void InitList(SLink *&sl)
{
sl=(SLink *)malloc(sizeof(SLink));
sl->next=sl;
}

/***creat a list****/
void CreateList(SLink *&sl,int a[],int n)
{
SLink *s,*r;int i;
r=sl;
for(i=0;i<n;i++)
{
s=(SLink *)malloc(sizeof(SLink));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

/*****search elem**********/
SLink *SearchElem(SLink *sl,int m)
{
SLink *p=sl;
int j;
for(j=1;j<m-1;j++) //将p指向想要数据的前一个
{
p=p->next;j++;
}
return p;
}

/*******display a list***********/
void DispList(SLink *sl)
{
SLink *p=sl->next;
while(p!=sl)
{
cout<<p->data<<" "

看不懂啊

貌似是for(i=0;i<m-2;i++)p=p->next;这一句有问题,在上面程序中你截短了链表,而你未注意最后一个节点的next域指向何处,再用p=p->next,这是p-已经是野指针,可能指向操作系统使用的地址,所以会报错,还有把你代码的贴出来好找问题