我有以下单个链表,我总是得到长度为1,即使我推3个元素,并且总是只创建一个节点。请help.Thanks。
#include <stdio.h>
struct node
{
int data;
struct node *next;
};
void push(struct node **head,int data)
{
struct node *temp = (struct node*)malloc(sizeof(struct node));
temp->data=data;
if(*head == NULL)
{
*head=temp;
}
else
{
temp->next=*head;
*head=temp;
}
}
int length(struct node *head)
{
struct node *temp = head;
int count=0;
if(temp !=NULL)
{
count++;
printf("%d",temp->data);
temp=temp->next;
}
return count;
}
int main()
{
int a;
struct node *head=NULL;
push(&head,1);
push(&head,2);
push(&head,3);
a=length(head);
printf("%d",a);
return 0;
}
在长度函数中用while
代替if
在length
函数中,更改这一行:
if(temp !=NULL)
:
while(temp != NULL)
你注意到长度方法的结构了吗?您正在使用if语句,其中循环将是合适的。你得到的答案是1,因为你只执行了一次count ++语句。
错误来自push()
函数。如果head
不为空,则需要通过列表迭代到最后一个节点。如前所述while
而不是if
# include <stdlib.h>
void push(struct node **head,int data)
{
struct node *temp;
temp = malloc (sizeof *temp);
temp->data = data;
temp->next = *head;
*head = temp;
}