gpt4 book ai didi

c - 遍历链表并将每个值打印到屏幕上 C

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:55 24 4
gpt4 key购买 nike

我的输入文件是

1

2

3

4

5

我的输出应该是这样的

1 -> NULL

2 -> 1 -> NULL

3 -> 2 -> 1 -> NULL

4 -> 3 -> 2 -> 1 -> NULL

5 -> 2 -> 3 -> 2 -> 1 -> NULL

这是我的功能

void printList(Node* first)
{
Node *temp;
temp=first;

printf("elements in linked list are\n");
while(temp!=NULL)
{
printf("%d -> NULL\n",temp->value);
temp=temp->next;
}
}

这是完整的程序

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

typedef struct node{
int value;
struct node* next;
}Node;

Node* createNode(int data);
Node* insertFront(Node* first, Node* newNode);
void printList(Node* first);
void deleteList(Node* first);

int main(int argc, const char **argv)
{
int numItems, ch;
FILE *fp;

numItems = 0;

fp = fopen(argv[1], "r");
if(fp == NULL)
{
fclose(fp);
return -1;
}

while ((ch = getc(fp)) != EOF)
{
if (ch = '\n') numItems++;
}
fclose(fp);

Node *first = NULL;
Node *newNode;
Node *Next;

int i;

for(i = 1; i <= numItems; i++)
{
newNode = createNode(i);
first = insertFront(first, newNode);
}

printList(first);
deleteList(first);

return 1;
}

Node* createNode(int data)
{
Node *newNode;

newNode = malloc(sizeof(Node));

newNode -> value = data;

newNode -> next = NULL;

return newNode;
}

Node* insertFront(Node* first, Node* newNode)
{
if (newNode == NULL) {
/* handle oom */
}

newNode->next=NULL;

if (first == NULL) {
first = newNode;
}

else {
Node *temp=first;

while(temp->next!=NULL)
{
temp = temp->next;
}

temp->next=newNode;

first = newNode;
}

return first;
}

void printList(Node* first)
{
Node *temp;
temp=first;

printf("elements in linked list are\n");
while(temp!=NULL)
{
printf("%d -> NULL\n",temp->value);
temp=temp->next;
}
}

void deleteList(Node* first)
{
Node *temp;
temp=first;
first=first->next;
temp->next=NULL;
free(temp);
}

谁能用这个给我指出正确的方向,我正在乘坐链表斗争巴士到这里。提前致谢。

最佳答案

你那里有几个错误。由于这是一项学习任务,我会描述错误而不是更正您的代码:

  • 您正在为每个元素打印 -> NULL;你应该只在循环结束时打印它。换句话说,每一行应该使用 "%d -> " 格式,然后在循环之后你应该打印 "NULL\n"
  • 您的 deleteList 不正确:您需要一个循环,类似于您在 printList
  • 中的循环
  • 您创建列表的方式看起来很可疑:您没有读取文件,而是计算行数,然后创建一个包含 012 的列表, ... 基于行数。您应该将文件中的数据读入您的列表;您可以在进行计数的同一个循环中执行此操作,因为链表不需要预先知道它们的长度。

关于c - 遍历链表并将每个值打印到屏幕上 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com