Finding the mid point in linked list

While finding the midpoint of a linked list in the video runner technique is being used, so in this technique, if the fast pointer reached null or last pointer then the loop should terminate. In the video the condition for the while is being used is :

void MidPointByRunnerTechnique(node*&head)
{

node* fast=head->next;

node* slow=head;
while((fast!=NULL) && (fast->next!=NULL))
{
    fast=fast->next->next;
    slow=slow->next;
}
cout<<slow->data<<"\n";

}

why here instead of && , || is not working. Because if either of the two conditions is reached the loop should terminate.

while((fast!=NULL) || (fast->next!=NULL))
{

    fast=fast->next->next;
    slow=slow->next;
}

@Sahil-98-Sharma
hello sahil,
let say u are on the last node of linked list
image

then fast!=NULL and u will jump into the while loop.
Now
image
now u will try to move ur fast pointer two step ahead.
in first step fast->next (it will be null because fast is pointing to last node)
then it next step fast->next->next (it will give segmentation fault because fast->next is null and null->next is not allowed).

thats why we use && in place of || .