我的链表打印功能只保留一个值,我无法弄清楚原因。一切都按预期工作。
这是我存储在链表中的结构:
typedef struct list_element {
int value;
struct list_element *next;
} list_element;
这些是在列表上操作的功能:
list_element createNewLinkedList()
{
list_element *myElement = (list_element *) malloc(sizeof(list_element));
myElement->value = 0;
myElement->next = NULL;
return *myElement;
}
int insertNewElementAtEndWithValue(list_element element, int value)
{
list_element *myElement = &element;
do {
if (myElement->next == NULL) {
list_element *new = (list_element *)malloc(sizeof(list_element));
new->value = value;
new->next = NULL;
myElement->next = new;
} else {
myElement = myElement->next;
}
} while (myElement->next != NULL);
}
int printListValues(list_element firstNode)
{
list_element *temp = &firstNode;
int sentinel = 1;
while (sentinel) {
printf(" %d,", temp->value);
if (temp->next != NULL) {
temp = temp->next;
} else {
sentinel = 0;
}
}
return 0;
}
这是仅打印第一个值100:
的函数void checkLinkedList()
{
list_element list = createNewLinkedList();
list.value = 100;
for (int i = 1; i < 10; i++) {
int value = rand();
insertNewElementAtEndWithValue(list, value);
}
printListValues(list);
}
这有什么问题?
答案 0 :(得分:0)
你的功能
int insertNewElementAtEndWithValue(list_element element, int value)
接受list_element对象,意思是,列表头部的副本,你要传递的是一个指针,所以:
int insertNewElementAtEndWithValue(list_element *element, int value)
这样就可以将值添加到实际列表而不是它的副本。
您需要学习使用指针,并使用调试器来检查数据的位置。