我正在尝试这个程序,它要求我们以各种方式更改单词。
例如,如果给我们“MISSISSSIPPI” 那么输出应该是
MISP(不重复的出现顺序)
ISPM(频率)
IMPS(字母顺序)
我能够执行按字母顺序排列的事情,也可以为出现的顺序编写代码。我能够成功运行按字母顺序排列的函数,但代码在代码块上遇到排序函数时有点挂起。
void ord()
{
current = head1 ;
while(current != NULL)
{
current1 = current -> next ;
while(current1 != NULL)
{
if(current1 -> data == current -> data)
{
free(current1);
current1 = current1 -> next ;
}
else
current1 = current1 -> next ;
}
current = current -> next ;
}
ptr = head1 ;
while(ptr != NULL)
{
printf("%c" , ptr->data) ;
ptr = ptr -> next ;
}
}
在此函数中,current 指向列表的头部,而current one 指向head 的下一个。我递增当前节点并释放具有重复字母表的节点。 我的疑问是为什么代码必须停止?还建议一些频率事物的逻辑。
提前致谢
最佳答案
我想问题出在这里。
if(current1 -> data == current -> data)
{
free(current1);
current1 = current1 -> next ;
}
此处您正在释放 current1,然后推进它。
我的建议是你应该使用一个临时指针来保存“current1”的位置,然后将其推进或任何需要的东西。
关于c - 链表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26631057/