如何保存指向最后一个节点的指针
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;
这是无效的。您正在尝试使用空指针。
这里我有一个双向链表的按位置删除功能。我正在尝试保存指向最后一个节点的指针,以便在反向打印时,我不必迭代到最后一个节点。
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;
这是无效的。您正在尝试使用空指针。