我真的在努力解决这个问题。 它是关于数据结构中的链表。
有一个名为example.txt
的文件。
USA
Japan
China
Korea
Canada
我想使用链接列表
编写如下所示的新文件Canada
Korea
China
Japan
USA
这是我的代码:
#include <stdafx.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 1024
typedef struct _node Node;
struct _node {
char* data;
Node *next;
};
typedef struct _list {
Node *cur;
Node *head;
Node *tail;
}List;
int createNode(List *lp, char* data);
int createNode(List *L, char* data)
{
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (L->head == NULL && L->tail == NULL)
L->head = L->tail = newNode;
else {
L->tail->next = newNode;
L->tail = newNode;
}
L->cur = newNode;
}
void printNodes(List *L)
{
Node *p = L->head;
while (p != NULL) {
printf("%s\n", p->data);
p = p->next;
}
}
int main()
{
FILE *fp1, *fp2;
char file_name1[128], file_name2[128];
char line[MAX_LEN];
//create list
List* input_list = (List*)malloc(sizeof(List));
input_list->cur = NULL;
input_list->head = NULL;
input_list->tail = NULL;
fopen_s(&fp1,"Example.txt", "r"); //open the input file
if (fp1 == NULL) {
printf("file open is not successful\n");
return -1;
}
fopen_s(&fp2, "Example2.txt", "w");
int cw = 0;
while (cw !=5) {
fscanf_s(fp1, "%s", line,sizeof(line));
createNode(input_list, line);
cw++;
}
printf("\n\n");
printNodes(input_list);
fclose(fp1);
fclose(fp2);
system("pause");
return 0;
}
但我不知道这段代码有什么问题。 它打印就像这样。
Canada
Canada
Canada
Canada
Canada
你能帮帮我吗?
答案 0 :(得分:0)
您正在将数组(行)的相同地址分配给链表的所有节点。 这就是为什么链接列表的所有节点都指向具有从文件中读取的最后一个字的值的相同地址的原因。 为了解决这个问题,首先使用malloc分配指针(* data),然后复制数据
int createNode(List *L, char* data)
{
Node *newNode = (Node*)malloc(sizeof(Node));
int len = 0;
while (*(data + len) != '\0')len++;
newNode->data = (char*)malloc(len * sizeof(char));
strcpy(newNode->data, data);
newNode->next = NULL;
if (L->head == NULL && L->tail == NULL)
L->head = L->tail = newNode;
else {
L->tail->next = newNode;
L->tail = newNode;
}
L->cur = newNode;
}