我正在尝试找到链接列表的中间元素,但是我遇到了分段错误,我不确定会出现什么问题。这是我对野兔算法的实现:
//fast slow pointer method
void ptMiddle(struct node **head_ref)
{
struct node *fast = (*head_ref);
struct node *slow = (*head_ref);
fast = fast->next;
while(fast!=NULL)
{
// printf("%d%d",slow->data,fast->data);
slow = slow->next;
fast = fast->next->next;
}
printf("Middle elemnet is:%d\n",slow->data);
}
int main()
{
struct node * head=NULL;
push(&head,1);
push(&head,2);
push(&head,3);
push(&head,4);
printList(&head);
printf("M:%d\n",middleNode(&head)->data);
printf("here");
append(&head,5);
append(&head,6);
printList(&head);
printf("M:%d\n",middleNode(&head)->data);
printf("here");
ptMiddle(&head);
return 0;
}
请帮忙。
答案 0 :(得分:0)
你的问题在于:
$args = array(
'status' => null,
'customer_id' => null,
'customer_note' => null,
'parent' => null,
'created_via' => null,
'cart_hash' => null,
'order_id' => 0,
);
想象一下,链接列表中有两个元素:fast = fast->next->next;
,首先执行A -> B -> NULL
,这会导致快速指向fast = fast->next
节点。
当您输入while循环时,您会尝试获取B
,这会产生B->next->next
,这显然不存在。
实施是完全错误的,你应该确保避免这种情况。时间可以改为:
NULL->next
这会解决它。
请记住,如果有一对元素,你总会得到更左边的中间元素。因此,在while(fast!=NULL && fast->next != NULL)
中,您将获得节点A -> B -> NULL
。