#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
void creatlist1(linklist *head,int n)
{
linklist *p,*s;
int i;
head->next=NULL;
s=head;
for(i=0;i<n;i++)
{
p=(linklist*)malloc(sizeof(linklist));
scanf("%d",&p->data);
s->next=p;
s=p;
}
}
void displaylist(linklist *head)
{
linklist *p;
int i=0;
p=head->next;
if(p==NULL)
{
printf("這是個空指標\n");
}
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
linklist *head;
head=(linklist*)malloc(sizeof(linklist));
creatlist1(head,5); //創建一個鏈式串列
displaylist(head); //輸出串列中的元素
return 0;
}
uj5u.com熱心網友回復:
p=(linklist*)malloc(sizeof(linklist));p->next=NULL
uj5u.com熱心網友回復:
正如樓上朋友說的,代碼產生問題的主要原因在于displaylist()函式的while (p)
{
printf("%d ", p->data);
p = p->next;
}
在遍歷鏈表的時候,最后一個元素時,理論上p->next應該指向空指標,但是由于createlist1()函式的for回圈中分配記憶體時,并沒有對p->next值進行顯式地賦空指標值,導致最后一個元素的p->next不是空指標而是一個隨機值,在我除錯的VS2015中,這個值是0xcdcdcdcd。這樣就導致在displaylist()函式的while()陳述句中會訪問0xcdcdcdcd,而這個地址是不能訪問的,就會直接報錯。
解決的方法就是在createlist1()函式的for回圈中
p = (linklist*)malloc(sizeof(linklist));
p->next = nullptr;
uj5u.com熱心網友回復:
資料結構對單鏈表進行資料排序 http://bbs.csdn.net/topics/392201633uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
void creatlist1(linklist *head,int n)
{
linklist *p,*s;
int i;
head->next=NULL;
s=head;
for(i=0;i<n;i++)
{
p=(linklist*)malloc(sizeof(linklist));
scanf("%d",&p->data);
s->next=p;
s=p;
}
s->next = NULL; //last node's next pointer NULL
}
void displaylist(linklist *head)
{
linklist *p;
//int i=0;
p=head->next;
if(p==NULL)
{
printf("這是個空指標\n");
return; //exit from displylist
}
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
linklist *head;
head=(linklist*)malloc(sizeof(linklist));
creatlist1(head,5); //創建一個鏈式串列
displaylist(head); //輸出串列中的元素
return 0;
}
供參考~
原因是創建鏈表的時候沒有對最后一個節點做處理,即最后一個節點的next指標應該指向NULL
displaylist出現無限回圈就是因為沒有找到NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269651.html
標籤:C語言
上一篇:c語言列印日歷
下一篇:要在鏈式串列中某位置插入一個元素,然后寫了下面這個函式來查找該位置的前一個位置并用指標指向它,最后傳回該指標,但是感覺這個函式有點問題,求大神們幫我看看,怎么改
