[英]How to build a Linked_list_builder function in C
我正在學習鏈表,我想創建一個創建鏈表的函數,之后我想創建一個 for 循環,它將在主函數中打印我們的鏈表。 我試過這個:
#include <stdio.h>
#include <stdlib.h>
typedef struct linked_list {
int data;
struct linked_list* link;
}node;
//building list
node linked_list_builder(int length) {
node* list;
list = (node*) malloc(length * sizeof(node));
for(int i=0;i<length;i++)
{
printf("Data in list no.%d at index %d = ",i+1,i);
scanf("%d",list->data);
list->link += 1;
}
return *list;
}
int main() {
int length;
printf("Enter the length of Linked list:\n");
scanf("%d", &length);
node list = linked_list_builder(length);
//printing list
for(int i=0;i<length;i++)
{
printf("index %d->list %d = %d\n",i,i+1,list.data);
list.link++;
}
return 0
}
我不知道確切的問題是什么,我不知道如何從函數中返回我的鏈表,以及如何實際旅行並打印它的數據?
你有兩個問題:
正如@WhozCraig 所指出的:
您一次為所有節點保留空間,如果可能的話,您無需創建一個列表(具有內存碎片的障礙並且還需要一個額外的指針來指向下一個節點),在這種情況下它會足以使用數組。
當您事先不知道所需的元素數量時,列表很有用。 如果您確實需要一個列表,請將列表的第一個元素的位置存儲在一個變量( head
)中,並通過push
函數將元素一個一個地添加到該列表中:
node *linked_list_push(node *tail, int data) {
node *curr = calloc(1, sizeof(node));
curr->data = data;
if (tail != NULL) {
tail->link = curr;
}
return curr;
}
node *head = NULL, *tail = NULL;
// pushing list
for (int i = 0; i < length; i++) {
tail = linked_list_push(tail, i);
if (head == NULL) {
head = tail;
}
}
// printing list
while (head) {
node *temp = head;
printf("%d\n", head->data);
head = head->link;
free(temp);
}
正如@Kuro 所指出的:
scanf
想要一個指針:
scanf("%d",list->data);
應該
scanf("%d",&list->data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.