C链表列表弹出功能

时间:2012-11-06 02:58:48

标签: c list pointers linked-list pop

所以我的运行时间很短,无法完成。我只剩下一件事要做,它是链接列表堆栈的pop函数。我不确定为什么我不能让它工作,我明白为什么,但我不明白如何解决这个问题。这是代码......

void pop(node** hd){
    if(hd == NULL){
        printf("%s %c", "No solution available, exiting program.");
        exit(-1);
    }
    node* temp = (*hd) -> next;
    free(hd);
    if(temp == NULL){
        printf("%s %c", "No solution available, exiting program.");
        exit(-1);
    }
    *hd = temp;
}

这是结构......

typedef struct nodeStruct
{
int valX, valY;
struct nodeStruct* next;
}node;

TEST PROGRAM

2 个答案:

答案 0 :(得分:3)

node *temp = (*hd)->next;因为hd是双指针。

答案 1 :(得分:1)

您需要免费*hd

static void pop(node **head)
{
    if (head && *head) {
        node *temp = (*head)->next;
        free(*head);
        *head = temp;
    }
}

请注意,如果temp为NULL,则不是错误 - 您刚刚到达堆栈的末尾。