我正在实施一个简单的循环链表。
在测试过程中仍然存在实施插入功能的问题。
根据我在下面实施的代码,
我预期的输出是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;
}
答案 0 :(得分:0)
我会稍微清理你的代码。例如,listPointer
不是指向指针,而是指向结构。此外,head
指的是双指针,这似乎是不必要的。另外,正如一些人在评论中指出的那样,对一个指针进行打字是一个坏主意。最后,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;
}
我希望这有用。