0

由于某种原因,我无法打印整个链表。我哪里会出错?请帮忙。提前致谢。

列表的基本结构。

struct node
{
    int num;
    struct node *next;
};

typedef struct node *list;

主功能。

int main()
{
    int i, j, k, l;
    list head = NULL, start = NULL, temp, p;

    printf("Enter the number of nodes in the list: ");
    scanf("%d", &k);

链表的形成。

    for(i=0;i<k;i++)
    {
        if (i==0)
        {
            start = (list) malloc(sizeof(struct node));
            start->num = i;
            head = start;
            head->next = NULL;
        }
        else
        {   
            temp = (list) malloc(sizeof(struct node));
            temp->num = i;
            head->next = temp;
            head->next = NULL;
        }
    }   

打印链表。

    p = start;
    while(p != NULL)
    {
        printf("%d", p->num);
        p = p->next;
    }
    return 0;
}
4

2 回答 2

3
        temp = (list) malloc(sizeof(struct node));
        temp->num = i;
        head->next = temp;
        head->next = NULL;

您始终将新元素放置为第二个元素,然后将其删除 - 有效地使您的恒定大小列表为 1。

您可能需要设置temp->next = NULL(而不是head->next设置element->next = temp-element列表中的最后一个元素在哪里(而不是head)。
(另一种方法是将元素添加为 newhead和 set temp->next = head;

于 2012-08-19T11:11:21.980 回答
3

你是不是错过了一些东西:

head->next = temp;
head->next = NULL;

你正在head用覆盖你的下一个NULL。你应该有你head的第一点temp

head->next = temp;   // (4) see my comment on this post for 
head = temp;         // (5) the meaning of the number
head->next = NULL;   // (6)

编辑:顺便说一句,您应该重命名headcurrent/last或类似的名称。否则,可以很容易地交换headand的含义start

于 2012-08-19T11:12:28.250 回答