Leetcode——链表的中间节点

Leetcode——链表的中间节点_第1张图片

方法:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* middleNode(struct ListNode* head){
    struct ListNode* slow = head, *fast = head;

    while(fast != NULL && fast->next != NULL)
    {
        slow = slow->next;
        fast = fast->next->next;
    }

    return slow;
}

思路:

快慢指针思想,创建两个指针,开始时都指向头节点,之后slow走一步,fast走两步。当fast走到尾时,slow就是中间节点。但是根据节点个数的奇偶分为两种情况,当个数为奇数时,slow走到中间时,fast走到最后一个节点。当个数为偶数时,slow走到中间时,fast走到空节点。因此循环条件要写两种情况。 

你可能感兴趣的:(Leetcode,leetcode,链表,算法)