找链表的中点。
链表 1->2->3
的中点是 2
。
链表 1->2
的中点是 1
。
思路:
- 2个指针从链表的头开始。
- 一个指针每步+1,一个指针每步+2
- 然后跑的快的指针到链表尾部的时候,那个慢一点的指针就是中点了
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution{
public:
/**
* @param head: the head of linked list.
* @return: a middle node of the linked list
*/
ListNode *middleNode(ListNode *head) {
if(head == NULL) return NULL;
ListNode *fast=head,*slow=head; //定义多个指针时,每个都要打*
while(fast!= NULL && fast->next != NULL){ //要用并运算判断到尾,不能用或,
fast=fast->next;
if(fast!=NULL&&fast->next!=NULL){//要用并运算,1->2中slow不能跳,所以要并运算fast->next!=NULL
fast=fast->next;
slow=slow->next;
}else{
break;
}
}
return slow;
}
};