递归/链表

时间:2013-03-18 11:28:44

标签: c recursion linked-list

我无法弄清楚插入功能有什么问题。

基本上在main函数中我要求用户输入一个整数,它应该遍历列表RECURSIVELY并按顺序插入数字。如果您还有其他需要,请告诉我。

当我打印出列表时,它只打印出0两次

In the main:
            **This is looped**
    printf("Enter the value you want to insert: ");
    scanf(" %d", &integer);
    current = insert(&head, integer);
    temp = current;

    while(temp)
    {
        printf("%d\n", temp->num);
        temp = temp->next;
    }


node* insert(node** head, int integer)
{
    node* temp = malloc(sizeof(node));
    node* temp1;
    node* new;

    if(*head == NULL)
    {
        temp->num = integer;
        temp->next = *head;
        *head = temp;
    }
    else if((*head)->num > integer)
    {
        temp = *head;
        temp1 = temp->next; //breaks the link
        temp->next = new;   //creates a new node
        new->num = integer;  //adds int
        new->next = temp1;   //links new node to previously broken node
        *head = temp;
    }

    else
        insert(&((*head)->next), integer);

    return(temp);
}

非常感谢!

2 个答案:

答案 0 :(得分:3)

if(*head == NULL)
{
    (*head)->next == temp;
    temp->num = integer;
    temp->next = *head;
    *head = temp;
}

这是错误的并且会导致读取无效,因为* head为NULL,因此(*head)->next无效。它将从NULL + offset读取。 offset取决于node数据类型的定义。

答案 1 :(得分:1)

while(temp)
{
    printf("%d\n", current->num);
    temp = temp->next;
}

我认为您希望打印temp->num而不是current->num