/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head){
if(head == NULL)
{
return head;
}
struct ListNode *p;
struct ListNode *q; //快慢指针
p = head;
q = head;
while(p != NULL && p->next != NULL) //条件1为偶数个情况,条件2为奇数个情况(条件不能写反:如果p->next不为空,p一定也不为空,如果当前p已经空了则p->next就没有定义了,编译器会报错)
{
p = p->next->next; //快指针一次走两步,慢指针一次走一步
q = q->next;
}
return q;
}