方法一:
ListNode *FindMid(ListNode* head){
ListNode *p=head,*q=head;
while(q->next!=NULL&&q->next->next!=NULL){
p=p->next;
q=q->next->next;
}
return p;
}
方法二:
ListNode* FindMid(ListNode* head){
ListNode *pre=NULL,*p=head,*q=head;
while(q!=NULL&&q->next!=NULL){//q每次都比p多走一步,这样当q到终点时,p正好到中间,用pre记录p前一个节点
pre=p;
q=q->next->next;
p=p->next;
}
if(pre!=NULL){
pre->next=NULL;//从p点断开,分为以head和p为头节点的两个链表
}
return p;//返回以p为头节点的两个链表
}
方法三:
ListNode* FindMid(ListNode* head){
ListNode *p=head,*q=head->next;
while(q!=NULL&&q->next!=NULL){
p=p->next;
q=q->next->next;
}
return p;
}