【发布时间】:2013-09-27 18:26:50
【问题描述】:
我目前正在解决列表和函数的求和问题,我遇到了这个问题,即将链表逆时针旋转 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 。 需要帮助:)
【问题讨论】:
-
调试器说了什么?
-
想想列表需要做什么。找到第 k 个元素;使它成为新的头,使旧的尾巴指向旧的头。我没有看到执行最后两部分的代码。同时返回新的头部
-
第二个 while 循环到列表的末尾,ptr->next=node 使尾部指向旧的头部。 node=knode->next 使 5 个新的列表头
标签: c linked-list