在不使用任何额外指针的情况下反转双链表

问题描述 投票:0回答:1

我试图在不使用任何额外指针的情况下反转双向链接列表。我只有头指针指向双向链接列表的第一个节点。

这是我的反向链接列表功能:

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)

c linked-list doubly-linked-list
1个回答
0
投票

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;
    }
}}
© www.soinside.com 2019 - 2024. All rights reserved.