Простой LInked список - PullRequest
       6

Простой LInked список

1 голос
/ 13 сентября 2011

У меня есть следующий единственный связанный список, я всегда получаю длину как 1, даже если я нажимаю 3 элемента, и всегда создается только один узел. Пожалуйста, помогите. Спасибо.

#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;
}

Ответы [ 5 ]

5 голосов
/ 13 сентября 2011

Заменить if на while в функции длины

2 голосов
/ 13 сентября 2011

В вашей функции length измените эту строку:

if(temp !=NULL)

к этому:

while(temp != NULL) 
1 голос
/ 13 сентября 2011

Ошибка происходит от функции push(). Если head не равно нулю, вам нужно перебрать список до последнего узла. И как уже было сказано while вместо if

1 голос
/ 13 сентября 2011

Вы заметили структуру вашего метода длины? Вы используете оператор if, где уместен цикл. Вы получаете ответ 1, потому что вы выполняете оператор count ++ только один раз.

Надеюсь, это поможет.

0 голосов
/ 13 сентября 2011
# 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;
} 
...