c

时间:2018-05-18 18:34:31

标签: c

我正在实施一个简单的循环链表。

在测试过程中仍然存在实施插入功能的问题。

根据我在下面实施的代码,

我预期的输出是10 20,但结果是20 20。

即使我修了几次,我也无法弄清楚是什么错误。

这从一开始就是错误的方法吗?

#include <stdio.h>
#include <stdlib.h>

typedef int element;
typedef struct node
{
    element data;
    struct node *link;
} *nodePointer;
typedef struct list
{
    nodePointer *head;
    int length;
}listPointer;

nodePointer *head = NULL;
listPointer *list = NULL;

void createList()
{
    list = (listPointer *)malloc(sizeof(struct list));
    list->head = NULL;
    list->length = 0;
}
void insertLast(element data)
{
    printf("here %d\n", data);
    nodePointer newNode = (nodePointer)malloc(sizeof(struct node));
    newNode->data = data;
    if(head == NULL)
    {
        newNode->link = newNode;
        head = &newNode;
    }
    else
    {
        newNode->link = (*head)->link;
        (*head)->link = newNode;
    }
    list->head = head;
    printf("%d\n", (*head)->data);
    list->length++;
}
void display()
{
    int i;
    nodePointer printNode = (*list->head);
    for(i = 0; i <list->length; i++)
    {
        printf("%d ", printNode->data);
        printNode = printNode->link;
    }
    puts("");
}
int main(void)
{
    createList();
    insertLast(10);
    insertLast(20);
    display();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我会稍微清理你的代码。例如,listPointer不是指向指针,而是指向结构。此外,head指的是双指针,这似乎是不必要的。另外,正如一些人在评论中指出的那样,对一个指针进行打字是一个坏主意。最后,insertLast实际上并未将项目添加到列表中,而只是将项目插入head之后的位置。这是我清理了一下后得到的,它完美无缺。老实说,我不确定出了什么问题,但这里有一些工作代码。

#include <stdio.h>
#include <stdlib.h>

typedef int element;
typedef struct node
{
    element data;
    struct node *link;
} node;
typedef struct list
{
    node *head;
    int length;
} llist;

node *head = NULL;
llist *list = NULL;

void createList()
{
    list = (llist *)malloc(sizeof(llist));
    list->head = NULL;
    list->length = 0;
}
void insertLast(element data)
{
    printf("here %d\n", data);
    node *newNode = (node *)malloc(sizeof(struct node));
    newNode->data = data;
    if(head == NULL)
    {
        newNode->link = newNode;
        head = newNode;
    }
    else
        {
        node *lastNode = head;
        for (int i = 1; i < list->length; i++) {
            lastNode = lastNode->link;
        }

        lastNode->link = newNode;
    }
    list->head = head;
    printf("%d\n", head->data);
    list->length++;
}
void display()
{
    int i;
    node *printNode = list->head;
    for(i = 0; i < list->length; i++)
    {
        printf("%d ", printNode->data);
        printNode = printNode->link;
    }
    puts("");
}
int main(void)
{
    createList();
    insertLast(10);
    insertLast(20);
    display();
    return 0;
}

我希望这有用。