【发布时间】:2016-09-05 13:33:26
【问题描述】:
我在理解一般的链表时遇到了困难。我了解它们是如何在纸上工作的,但是一旦我开始编写它们,我似乎永远不会完成任何事情。
这是我的代码:
头文件:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct List {
int data;
struct List * next;
} List;
实现文件:
#include "test.h"
void addToFront(int data, List * head);
int main(void) {
List * list;
list = malloc(sizeof(List));
list->next = NULL;
List * head;
head = NULL;
addToFront(5,head);
printf("%d",head->data); //print first element
printf("%d",list->data); //print first element
}
void addToFront(int data, List * head) {
if(head == NULL) {
List * newNode = malloc(sizeof(List));
newNode->data = data;
head = newNode;
}
else {
List * newNode = malloc(sizeof(List));
newNode->data = data;
newNode->next = head;
head = newNode;
}
}
我知道如果一个链表是空的,标题是NULL,所以我在那里检查了。当我收到一个段错误说标头未初始化时,问题就出现了,显然不是,如果我进行了初始化,我无法跟踪列表是否为空,因此使用了标头节点。
我现在能做什么?我不想使用双指针,因为到目前为止,我的班级还没有其他人在使用它们(请不要让我使用双指针),我完全不知道如何在这里继续。
我正在考虑在没有标头节点的情况下尝试此操作。因此,我可以有一个计数器来跟踪列表中的项目,检查它是否为零,然后将基本元素添加到前面,否则做我在 else 语句中做的同样的事情?
【问题讨论】:
标签: c pointers memory data-structures linked-list