[英]Infinite loop in creation of linked list
為了創建鏈表,我將新節點設置為 static 節點而不是動態節點,現在我的顯示 function 循環被轉換為無限循環,為什么?
節點結構
#include <stdio.h>
typedef struct node
{
int data;
struct node* next;
}node;
我所做的唯一更改是在此 function 中,更改后它也運行良好。
node * createLinkedList(int n)
{
int i=0;
node * head=NULL;
node * temp=NULL;
node * p=NULL;
for(i=0;i<n;i++)
我從這里更改了我的代碼,而不是編寫
temp=(node *)malloc(sizeof(node));
我做了一個 static 節點“x”。
{
node x; // instead of malloc I made a static node.
x.next=NULL;
printf("Enter data in node %d: ",i+1);
scanf("%d",&(x.data));
temp=&x;
if(head == NULL)
{
head=temp;
}
else
{
p=head;
while(p->next != NULL)
{
p=p->next;
}
p->next=temp;
}
}
return head;
}
這是顯示function,這里的改動導致的問題
void display(node * p)
{
node * temp=p;
正是在這里被轉換為無限循環。
while(temp->next != NULL)
{
printf("\t%d->",temp->data); //Due to static node this became an infinite loop , Why?
temp=temp->next;
}
}
為什么會這樣,雖然當我動態分配 memory 時該程序運行良好,但是在將 static 節點作為新節點后,正在創建無限循環???
主要問題不在您的顯示 function 中,而是在您創建鏈接列表時。
在 function 中聲明的變量 static 保留其 state 所以基本上它的地址將始終相同。
在您的情況下,您的 x 僅初始化一次並始終保留相同的地址。
在循環的第一次迭代中,temp 將具有相同的 x 地址,head 將具有相同的 x 地址。
node x; // instead of malloc I made a static node.
x.next=NULL;
printf("Enter data in node %d: ",i+1);
scanf("%d",&(x.data));
temp=&x;
if(head == NULL)
{
head=temp;
}
然后在循環 x 的第二次迭代中保留它的舊地址,然后再次臨時保存相同的地址。 這次我們 go 到 else 部分,p 將有頭的地址,即 x 的地址。 現在 p->next 將指向 temp 的地址,它也是 x 的地址。
else
{
p=head;
while(p->next != NULL)
{
p=p->next;
}
p->next=temp;
}
所以 x 的地址在 temp, head, head->next 中,這是您創建的 static 節點的問題,因為您認為它每次都會創建新實例。 您指向創建的節點是自己的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.