c - 旋转链表 C

标签 c linked-list

我目前正在解决列表和函数的求和问题,我遇到了这个问题,即逆时针旋转链表 k。 这是相同的代码

void rotate_k(struct list *node,int k)
{
   int count=0;
   struct list *knode,*ptr=node;
   while(ptr!=NULL && count < k)
    {
      ptr=ptr->next;
      count++; 
     }
    knode=ptr;
    while(ptr->next!=NULL)
     {
      ptr=ptr->next;
      }
    ptr->next =node;
    node=knode->next;
    knode->next=NULL;
  }

假设输入是 1->2->3->4->5->6 且 k=4。

输出应该是 5->6->1->2->3->4 但代码给出输出 1->2->3->4->5 。 需要帮助:)

最佳答案

您没有修改原始列表(node 参数)

struct list *rotate_k(struct list *node,int k)
{
   int count=0;
   struct list *knode,*ptr=node;
   while(ptr!=NULL && count < k)
   {
      ptr=ptr->next;
      count++; 
   }
   knode=ptr;
   while(ptr->next!=NULL)
   {
      ptr=ptr->next;
   }
   ptr->next =node;
   node=knode->next;     
   knode->next=NULL;

   return knode; //<-- THIS IS THE NEW LIST
}

此外,knode->next=NULL 很奇怪;您应该在 knode 之前(曾经)的节点上执行此操作(这就是从结果中删除 6 的原因)。

关于c - 旋转链表 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057643/

相关文章:

c - 链表从闪存过渡到 Ram

c++ - 用于 C++ 环境的 visual studio 插件

连接字符串 - 需要说明

c - 我们如何定义用于识别给定系列中特定序列的规则?

c - 编写一个函数来返回节点的位置

c - 节点插入、链表

c - 如何从链表/队列中删除所有具有相同值的节点

c - C中的scanf(用于扫描 float )和精度问题

GTK 可以与类似 readline 的库一起使用吗?

c - C 中链表中的空指针