im 试图在不使用任何额外指针的情况下反转双链表。我只有指向双链表的第一个节点的头部指针。
这是我反转链表的函数:
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;
}
}}