要求:
样例 1:
输入: 1->2->3
输出: 2
样例解释: 返回中间节点
样例 2:
输入: 1->2
输出: 1
样例解释: 如果长度是偶数,则返回中间偏左的节点。
ListNode * middleNode(ListNode * head) {
// write your code here
if(head == NULL){
return NULL;
}
ListNode *fast = head->next;
ListNode *slow = head;
while(fast && fast->next){
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
记录:1.寻找链表中点时用快慢指针的方法:
快指针每次走两步,慢指针每次走一步,当快指针走到底时,满指针就是中点位置。
2.用快慢指针判断链表中是否有环:
因为快指针每次都比慢指针多走一步,所以只要链表中存在换,快慢指针总会相遇。