我试图在不使用任何额外指针的情况下反转双向链接列表。我只有头指针指向双向链接列表的第一个节点。
这是我的反向链接列表功能:
int reverse(){
if(head==NULL || head->next==NULL){
return 0;
}
else{
head->prev=head->next;
head->next=NULL;
head->prev->prev=head->prev->next;
head->prev->next=head;
head=head->prev;
while(head->prev==NULL){
head->prev->prev=head->prev->next;
head->prev->next=head;
head=head->prev;
}
}}
如果我的链表中有数据1,2,3,4,5,并且在运行反向功能后,当我尝试显示数据时,我将输出:2,1(而不是5,4,3 ,2,1)
while语句while(head->prev==NULL)
中存在错误正确的代码是while(head->prev!=NULL)
所以该函数的正确代码是:
int reverse(){
if(head==NULL || head->next==NULL){
return 0;
}
else{
head->prev=head->next;
head->next=NULL;
head->prev->prev=head->prev->next;
head->prev->next=head;
head=head->prev;
while(head->prev!=NULL){
head->prev->prev=head->prev->next;
head->prev->next=head;
head=head->prev;
}
}}