【发布时间】:2020-04-09 13:28:12
【问题描述】:
我试图在不使用任何额外指针的情况下反转一个双链表。我只有指向我的双链表的第一个节点的头指针。
这是我反转链表的函数:
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)
【问题讨论】:
-
if(head==NULL && head->next==NULL)当head为 NULL 时,这将导致 NULL 指针访问。你可能想要||而不是&&。 -
为什么不迭代你的列表交换
next和prev,当你完成后,交换head和tail? -
@DavidC.Rankin 我认为挑战在于在不使用任何额外指针的情况下做到这一点。不确定这是硬性要求还是 OP 出于某种原因认为是个好主意。
-
您总是可以使用 XOR hack 进行交换,然后按照
prev指针进行迭代。 -
@user3629249 我在结构中定义了
head我唯一的错误是在while 语句while(head->prev==NULL)中更正错误后我的程序编译并正常工作
标签: c linked-list doubly-linked-list