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

How to save pointer to last node

这里我有一个双向链表的按位置删除功能。我正在尝试保存指向最后一个节点的指针,以便在反向打印时,我不必迭代到最后一个节点。

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;
        }
    }
}

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

在你的 else 块 else if (tmp->next == NULL) 你有一行

temp->next->prev = prev;

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