我试图在链接列表的开头添加节点,但是在我的代码中它只显示我输入的最后一个元素。这就是为什么会发生这种情况的原因
#include <stdio.h>
//node structure
struct node
{
int data;
struct node *next;
};
//结构
//datatype declaration
typedef struct node node ;
// head pointer which will indicate starting point of link list
node *head;
//create fuction that will insert values into note and its next pointer field
void create(int num);
//display function will display the link list
void display();
main()
{
int num,i,n;
printf("enter the nno of node to create : ");
scanf("%d",&n);
for(i=0;i<n;++i)
{
printf("enter data for node %d= ",i+1);
scanf("%d",&num);
create(num);
}
display();
//显示电话
}
void create(int num)
{
head=NULL;
node *temp;
temp=(node*)malloc(sizeof(node));
temp->data=num;
temp->next=head;
head=temp;
return;
}
// function create()end
void display()
{
node *temp1;
temp1=head;
while(temp1!=NULL)
{
printf("data : %d-> ",temp1->data);
temp1=temp1->next;
}
return;
}
// fucntion display()end
答案 0 :(得分:0)
您的主要问题是:
head=NULL;
因此你的行
temp->next=head;
始终将下一个设为NULL
。所以你的所有名单都是
长度为一。
我建议将head
声明为static
(和
因此从一开始就归零),或在head
中初始化main
。
答案 1 :(得分:0)
您的显示功能似乎很好,您的创建功能应该如下所示:
void create(int num)
{
node* temp = new node();
if(head ==NULL)
{ temp->data = num;
head = temp;
head->next = NULL;
}
else if(head->next == NULL)
{
temp->data = num;
head->next = temp;
}
else
{
node* temp2 = head;
while(temp2->next !=NULL)
{ temp2 = temp2->next;
}
temp->data = num;
temp2->next = temp;
}
return;
}
如果列表为空,有一个节点,或者多个节点将在最后位置插入,则上面的这个创建函数将放置节点。您现在可以将其插入头部或链接列表术语功能(InsertBeforeFirst)中。当然,如果你有节点* head up top应该初始化为NULL;