gpt4 book ai didi

c - 冒泡排序链表,交换指针。 C

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:10 24 4
gpt4 key购买 nike

我正在尝试使用冒泡排序交换单向链表的两个指针。我已经制作了比较功能,并且运行良好。在交换函数中,交换工作正常,我设法在节点和 node->next 之间交换,尽管链表“丢失”了节点的信息(交换后), 所以链表中的第一个节点是node->next。我正在使用一个通用函数来进行冒泡排序并调用比较函数和交换函数。

知道为什么会这样吗?

void swap_arr(void **arr,int i , int j)
{

Team *teamList = (Team*) arr ;
Team *teamI = (Team*) arr , *teamJ ;
Team *temp ;
Team *temp1;
int z;


// Receives instead i
for(z=0; z<i; z++)
teamI = teamI->next;

//teamJ is the i+1
teamJ = teamI->next;

temp = teamI;
temp1 = teamJ->next;


teamI = teamJ ;

teamJ = temp;

if (temp1->next->next==NULL)
teamJ->next = NULL;
else
teamJ->next = temp1->next;

teamI->next = teamJ;

if (temp1==NULL)
teamJ->next=NULL;
else
teamJ->next = temp1;
}

最佳答案

为了交换两个节点 (a,b),您需要访问指向第一个节点的“外部”节点 (o)。 (并且在a和b之后还有一个节点p。(p也可以为NULL,但这并不重要)

旧情况:

o->next == a
a->next == b
b->next == p

新情况:

o->next == b
b->next == a
a->next == p

只有 o 实际上一个节点时才能执行此交换。 (因此:有一个 o->next 指针),因此您需要特殊代码来处理 a 是链头的情况。

但不是:o->next 只是一个“struct llist *”,因此可以使用任何指向 llist 的指针。在大多数情况下,最简单的解决方案是为交换函数使用指针到指针的参数;指向指针的指针可以指向链的头部,也可以指向某个节点的 -> 下一个指针。

关于c - 冒泡排序链表,交换指针。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8984560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com