我写了insert函数,它正常工作,然后写了rotate函数(链表)。这段代码通过了一些测试用例,但是某些测试用例可能会失败,在我尝试时显示了段错误运行此代码。
void rotate(struct node **head_ref, int k)
{
struct node *temp=*(head_ref);
struct node *t;
struct node *start;
start=*(head_ref);
while(k--)
{
t=temp;
temp=temp->next;
}
t->next=NULL;
*head_ref=temp;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=start;
}
答案 0 :(得分:0)
如果具有外部函数,则必须验证每个参数。
在您的情况下,head_ref
可以为NULL,因此:
if (head_ref != NULL)
{
...
}
错误将在这里:while(k--)
,因为您尝试在(可能的)NULL上获取属性。
应该是while(k-- && temp != NULL)
。
变量应该命名为变量的名称,那么k
在做什么呢? ;)
Ps。如果您没有可见的修饰符(静态-私有,外部-公共),则默认情况下该功能为外部。