我尝试打印列表时出现问题

时间:2018-08-24 15:52:58

标签: c list

我陷入列表问题,问题是当我尝试打印整个列表时,它仅打印第一个节点,主要目标是仅在调用main.c时调用函数由header.h文件连接的functions.c文件中的文件。 这是main.c文件,这里无话可说

#include<stdio.h>
#include<stdlib.h>
#include "header.h"



    int main(void){
    List l;


    listNotOrdered(&l, 6);
    headInsertion(&l, 10);
    printList(&l);
    }

那是header.h文件。

typedef struct node{
    int data;
    struct node * next;
}Node;
typedef Node * List;

void listNotOrdered(List *l, int n);
void printList(List *l);
void headInsertion(List *l, int d);

那是functions.c,所有功能背后的逻辑都应该很好,它不会给出任何错误,我创建了randomNumber函数,以随机数创建了一个列表,而不是从哪个节点开始printList开始打印,我添加了headInsertion函数,因此当我打印列表时,它仅打印10值,因此从理论上讲,它仅打印第一个节点。

void headInsertion(List *l, int dato){
    Node * aux = (Node*)malloc(sizeof(Node));
    aux->data = dato;
    aux->next = *l;
    *l = aux;
}

void printList(List *l){
   while(l){
    printf("%d",(*l) -> data);
    (*l) = (*l) -> next;
   }
}

int randomNumber(int a){
    return a = -10 + rand () % ( 20 - 100 + 1);
}

void listNotOrdered(List *l, int n){
srand ( time ( NULL ));
int number, i;

    for (i = 0; i < n; i++){
        (*l) = (Node*)malloc (sizeof (Node));
        (*l) -> data = randomNumber(number);
        (*l) -> next = NULL;
        l = &(*l)->next;
    }
}

1 个答案:

答案 0 :(得分:2)

您希望它打印什么?

因为您只在printList中打印一次并返回。

void printList(List *l){
    printf("%d",(*l) -> data);
    (*l) = (*l) -> next;
}

如果要打印所有节点,则必须遍历如下列表。

void printList(List *l){
 List temp = *l;
  while(temp)
  {
     printf("%d\n",temp -> data);
     temp = temp -> next;
  }
}