gpt4 book ai didi

c - c中的简单循环链表

转载 作者:行者123 更新时间:2023-11-30 16:31:52 26 4
gpt4 key购买 nike

我正在实现一个简单的循环链表。

在测试过程中仍然实现插入功能时出现问题。

根据我下面实现的代码,

我预期的输出是 10 20,但结果是 20 20。

即使我修复了几次,我也无法找出问题所在。

这从一开始就是错误的做法吗?

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

typedef int element;
typedef struct node
{
element data;
struct node *link;
} *nodePointer;
typedef struct list
{
nodePointer *head;
int length;
}listPointer;

nodePointer *head = NULL;
listPointer *list = NULL;

void createList()
{
list = (listPointer *)malloc(sizeof(struct list));
list->head = NULL;
list->length = 0;
}
void insertLast(element data)
{
printf("here %d\n", data);
nodePointer newNode = (nodePointer)malloc(sizeof(struct node));
newNode->data = data;
if(head == NULL)
{
newNode->link = newNode;
head = &newNode;
}
else
{
newNode->link = (*head)->link;
(*head)->link = newNode;
}
list->head = head;
printf("%d\n", (*head)->data);
list->length++;
}
void display()
{
int i;
nodePointer printNode = (*list->head);
for(i = 0; i <list->length; i++)
{
printf("%d ", printNode->data);
printNode = printNode->link;
}
puts("");
}
int main(void)
{
createList();
insertLast(10);
insertLast(20);
display();
return 0;
}

最佳答案

我会稍微清理一下你的代码。例如,listPointer 并不引用指针,而是引用结构。另外,head 指的是双指针,这似乎没有必要。另外,正如一些人在评论中指出的那样,使用 typedef 指针是一个坏主意。最后,insertLast 实际上并不将项目追加到列表中,而只是将项目插入到 head 之后的位置。这是我清理了一下后得到的,效果很好。老实说,我不太确定出了什么问题,但这里有一些工作代码。

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

typedef int element;
typedef struct node
{
element data;
struct node *link;
} node;
typedef struct list
{
node *head;
int length;
} llist;

node *head = NULL;
llist *list = NULL;

void createList()
{
list = (llist *)malloc(sizeof(llist));
list->head = NULL;
list->length = 0;
}
void insertLast(element data)
{
printf("here %d\n", data);
node *newNode = (node *)malloc(sizeof(struct node));
newNode->data = data;
if(head == NULL)
{
newNode->link = newNode;
head = newNode;
}
else
{
node *lastNode = head;
for (int i = 1; i < list->length; i++) {
lastNode = lastNode->link;
}

lastNode->link = newNode;
}
list->head = head;
printf("%d\n", head->data);
list->length++;
}
void display()
{
int i;
node *printNode = list->head;
for(i = 0; i < list->length; i++)
{
printf("%d ", printNode->data);
printNode = printNode->link;
}
puts("");
}
int main(void)
{
createList();
insertLast(10);
insertLast(20);
display();
return 0;
}

希望这对您有所帮助。

关于c - c中的简单循环链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50417370/

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