c-链表的创建和显示



我的链表代码没有打印最后一个节点,你能帮我哪里出错吗我试着做了,但没用我不想让head节点分离,因此请不要告诉我更改整个代码如何释放整个代码的已分配内存最后,我如何使用递归显示

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data ;
struct node *next;
}node;
int create(int n);
void display(node* head);
int main()
{
int n;
node* HEAD = NULL;
scanf("%d",&n);
HEAD=create(n);
display(HEAD);
return 0;
}
int create(int n)
{
int i;
node * head=NULL;
node * temp=NULL;
node * p = NULL;
for(i=0;i<n;i++)
{
temp =(node*)malloc(sizeof(node));
scanf("%d",&(temp->data));
temp->next= NULL;
if(head==NULL)
{
head=temp;
}
else
{
p=head;
while(p->next != NULL)
{
p=p->next;
}
p->next=temp;
}
}
return head;
}
void display(node* head)
{
node* p= head;
while(p->next != NULL)
{
printf("n data: %d",p->data);
p=p->next;
}
}

while循环中的条件失败时,您还没有检查您所在的最后一个节点。您在上一次迭代结束时取消了对它的引用,但从未在内部打印数据。一个快速的解决方案是在循环退出后只打印当前节点的数据:

while(p->next != NULL)
{
printf("n data: %d",p->data);
p=p->next;
}
printf("n data: %d", p->data);

这也将解决你的问题评论中提出的问题。当然,在执行此操作之前,您仍然需要确保列表不为空。

考虑单个节点链表的情况。头部->next将计算为NULL。并且不会显示Head的值。要解决此问题,请向上移动printf语句。

编辑:您还必须确保HEAD不为空,否则如果您进行更改,您的代码仍将失败

void display(node* head)
{
node* p= head;
while(p->next != NULL)
{
printf("n data: %d",p->data);
p=p->next;
}
}

问题是您的while情况,您需要将while(p->next != NULL)更改为while(p != NULL)。这是因为你的指针在最后一个元素上,但你正在检查他的下一个元素。另外,将int create(int n)更改为node * create(int n)。您返回的是指针,而不是int参数。

相关内容

  • 没有找到相关文章

最新更新