c - 链表实现

标签 c linked-list

我正在尝试这个程序,它要求我们以各种方式更改单词。

例如,如果给我们“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/

相关文章:

java - 循环单链表

c++ - 无法将节点附加到链表 C++

algorithm - 在 O(1) 中实现并合并两个堆栈

Java如何返回扩展接口(interface)的泛型类型

C - 读取器/写入器(并发): Forking & Semaphores Output

c++ - 如何获取 Apple/Mac 上的可用虚拟内存量?

c - C 中有 setbase() 的等价物吗?如何在c中将基数设置为十进制、十六进制或八进制?

java - 在 Java 中重写 Iterables<Obj> 的正确方法

c - 试图将 stdin char[] 拆分为 ','

c - 如何在另一个函数中使用一个函数的返回值?