我正在尝试用c语言递归创建线性链表, 但继续坚持这里,代码不能使用错误“链接器工具错误LNK2019”。可悲的是,我无法理解这是什么问题。这是我的代码。
感谢您提前给予大力帮助。
#include <stdio.h>
#include <stdlib.h>
struct node
{
char num; //Data of the node
struct node *nextptr; //Address of the next node
};
typedef struct node element;
typedef element *link;
link head;
void displayList(); // function to display the list
int main()
{
char s[] = "abc";
link stol(s);
{
link head;
if (s[0] == '\0')return(NULL);
else {
head = (link)malloc(sizeof(element));
head->num = s[0];
head->nextptr = stol(s + 1);
return(head);
}
}
printf("\n\n Linked List : To create and display Singly Linked List :\n");
printf("-------------------------------------------------------------\n");
displayList();
return 0;
}
void displayList()
{
link tmp;
if (head == NULL)
{
printf(" List is empty.");
}
else
{
tmp = head;
while (tmp != NULL)
{
printf(" Data = %d\n", tmp->num); // prints the data of current node
tmp = tmp->nextptr; // advances the position of current node
}
}
}
答案 0 :(得分:0)
您在link
功能中重新定义了名为head
的{{1}}个对象。它隐藏了全局main()
变量。
删除head
中的定义可以解决您的问题,但在任何情况下都应考虑将main
作为参数传递给link*
函数。
我刚在displayList
注意到这句话return(head);
。因此,您也可以提前退出程序。
每次看到你的应用,我都会发现更多问题。如果我是你,我首先要创建一个向列表中添加节点的函数。将新节点添加到列表前面要容易得多,所以你应该先尝试一下。一旦你开始运行,尝试添加到尾部。添加到尾部是非常相似的,但你必须'walk main()
displayList()`另一种方法是保持你添加到列表中的最后一个节点*的地址。就像我说的,它增加了一些复杂性,所以首先使用addToHead。
the list first to get to the last element, exactly as you already do in
在你的main中,你可以一次分配一个新节点,就像你已经使用malloc()一样。使用整数初始化其内容void addToHead(link* l, node* n)
{
n->nextptr = l->nextptr;
l->nextptr = n;
}
,并让addToHead处理指针内容。你对指针的使用很糟糕,但是列表非常简单,addToList几乎可以显示指针中应该放什么和应该放什么 - 即其他指针。
您可以在第一个printf之前删除main()中的几乎所有内容。你必须
num
这应该需要大约8到10行代码。如果有疑问,您可以通过谷歌或http://en.cppreference.com/w/c轻松找到有关scanf的文档。