交换链表中的值



我想在链表中排序,在不打乱地址的情况下更改节点之间的值,当我设置交换条件时,我不能在那里放置任何代码。我尝试插入printf并更改值(除了交换(,结果出现了错误。

我想知道我的代码中哪一部分是错误的,我如何在不改变太多结构的情况下解决这个问题,这个代码是根据我学到的东西进行实验的,谢谢Advance的伙计们

#include <stdio.h>
#include <stdlib.h>
typedef struct Nodes
{
int value;
Nodes* next,*prev;
Nodes(int val)
{
value = val;
next = prev = NULL;
}
}Nodes;
Nodes *head,*tail,*curr;
void display()
{
curr = head;
while(curr)
{
printf("%d ",curr->value);
curr=curr->next;
}
}
void swap(Nodes *a,Nodes *b)
{
int temp = a->value;
a->value = b->value;
b->value = temp;
}
void sort()
{
curr = head;
while(curr)
{
Nodes *next = curr->next;
if(curr->value > next->value && next != NULL)
{
//          this space cant code anything or it will break
//          swap(curr,next);
}
curr = next;
}
}
void insert(int val)
{
if(!head)
{
head = tail = new Nodes(val);
}
else
{
curr = new Nodes(val);
tail->next = curr;
curr->prev = tail;
tail = curr;
}
}
int main()
{
insert(8);
insert(3);
insert(20);
display();
puts("");
sort();
display();
return 0;
}
if(curr->value > next->value && next != NULL)
//                              ^^^^^^^^^^^^   too late!

a && b首先检查a,只有当a为真时,才评估b–因此对于nextnullptr的检查仅在已经访问了*next之后评估(如果有的话,如果nextnullptr,则程序可能之前已经崩溃(。所以反过来检查一下:

if(next && curr->value > next->value)

然后你的排序算法是不完整的,看起来很像气泡排序,但只有一个"气泡"上升。。。

相关内容

  • 没有找到相关文章

最新更新