用C(递归)

时间:2017-06-17 14:21:29

标签: c singly-linked-list

我正在尝试用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
        }
    }
}

1 个答案:

答案 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()中的几乎所有内容。你必须

  1. 启动循环:
  2. 写一个提示,以便用户知道如何使用printf()
  3. 使用scanf(“%d”,&amp; n)或同等信息从用户读取输入。
  4. 如果用户输入负值,则
  5. 从循环中断。
  6. malloc()一个新节点
  7. 设置其数据num
  8. 调用addToHead添加节点。
  9. 循环,直到用户输入空字符串或-1。
  10. 这应该需要大约8到10行代码。如果有疑问,您可以通过谷歌或http://en.cppreference.com/w/c轻松找到有关scanf的文档。