我目前正在解决列表和函数的求和问题,我遇到了这个问题,即逆时针旋转链表 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/