如何保存指向最后一个节点的指针

时间:2018-05-23 03:26:07

标签: c data-structures doubly-linked-list

这里我有一个双位置列表的删除位置功能。我试图保存指向最后一个节点的指针,这样当反向打印时,我不必迭代到最后一个节点。

node* deleteByPos(node* list, node** last, int position) {
    int c = 0;
    node* temp;
    node* prev;

    temp=list;
    if (temp==NULL) {
        printf("No nodes available to delete\n\n");
        return list;
    } else {
        while(temp!=NULL && c != position) {
            prev=temp;
            temp=temp->next;
            c++;
        }
        if (temp==NULL) {
            printf("Reached end of list, position not available\n\n");
            return list;
        } else if (temp->next == NULL) {
            prev->next=temp->next;
            temp->next->prev = prev;
            &last = temp->next;
            free(temp);
            return list;
        } else {
            prev->next=temp->next;
            temp->next->prev = prev;
            free(temp);
            return list;
        }
    }
}

当我尝试删除列表中的最后一个位置时,出现了分段错误。我该如何解决?

1 个答案:

答案 0 :(得分:1)

在你的else块中,如果(tmp-> gt; next == NULL)你有一行

temp->next->prev = prev;

这是无效的。您正在尝试使用空指针。