添加到链接列表

时间:2016-03-15 00:26:52

标签: c linked-list

我有.c和.h文件。所有链表方法都是由我的教授提供的。我想通过创建main函数并尝试添加到链接列表然后显示链接列表来测试链接列表。我如何在main函数中执行此操作?这就是我所拥有的:

int main() {
    linkedList* test = createLinkedList();
    addToLinkedList(test, value);
    displayLinkedList(test);
}

我也试过这段代码:

int main() {
    linkedList* hello = createLinkedList();
    struct tnode* test = "hello";
    addToLinkedList(hello, test);
    return (0);
}

但是,我所做的并不起作用。

以下是教授给我们的代码:

TESTlinkedlist.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "TESTlinkedList.h"

/* Creates a linked list */
linkedList* createLinkedList() {
    return NULL;
}

/* Displays the linked list */
void displayLinkedList(linkedList* ll) {
    linkedList* p = ll;

    printf("[");
    while (p != NULL) {
        printf(" % d " , p -> node -> c);
        p = p -> next;
    }
    printf("]\n");
}

/* Adds a tree node to the linked list */
void addToLinkedList(linkedList** ll, tnode* val) {
    linkedList* nn = (linkedList*)malloc(sizeof(linkedList));
    nn -> node = val;
    nn -> next = NULL;

    linkedList* p = *ll;
    if (p == NULL) {
        p = nn;
    } else {
        while (p -> next != NULL) {
            p = p -> next;
        }
        p -> next = nn;
    }
}

TESTlinkedlist.h

/* Include Guards to prevent double inclusion with include directive */
#ifndef TESTLINKEDLIST_H
#define TESTLINKEDLIST_H

/* Typedef Structures */

typedef struct tnode {
    double weight;
    int c;
    struct tNode* right;
    struct tNode* left;
    struct tNode* parent;
} tnode;

typedef struct ll {
    tnode* node;
    struct ll* next;
} linkedList;

/* Methods */

linkedList* createLinkedList();
void displayLinkedList(linkedList* ll);
void addToLinkedList(linkedList** ll, tnode* val);
void addInOrder(linkedList **ll, tnode* nn);

#endif /* LINKEDLIST_H */

任何线索我如何创建一个新的链表,创建一个t节点并将其添加到该链表,然后显示它,给出我教授放下的方法?

2 个答案:

答案 0 :(得分:1)

您教授给您的代码已损坏,例如struct tnode* test = "hello";在编译期间导致错误。

把它带回给他并让他失望。当你在那里时,告诉他return不是一个功能而是he shouldn't cast malloc

在另一位教授 - malloc - 相关注释中,他应该检查返回值。例如:

linkedList* nn = malloc(sizeof *nn);
if (!nn) {
    return;
}
nn -> node = val;
nn -> next = NULL;

还有另一个错误,你可能都有错;有两个main入口点,您的编译器可能会在它们之间混淆。删除其中一个。

在这两个入口点中,addToLinkedList使用不正确;第一个参数旨在成为linkedList **,其中给出的是linkedList *。也许(在你的第一个main入口点)你打算写addToLinkedList(&test, value);。请注意额外的&符号。

答案 1 :(得分:0)

函数addToLinkedList和displayLinkedList需要获取指向指针的指针作为其第一个参数。 所以,主要应该是这样的:

int main() {
    linkedList* test = createLinkedList();
    addToLinkedList(&test, value);
    displayLinkedList(&test);
}

希望这有帮助。

相关问题