链表的中间结点

思路:使用两个指针变量,刚开始都位于链表的第 1 个结点,慢指针一次只走 1 步,快指针一次只走 2 步,一个在前,一个在后,同时走。这样当快指针走完的时候,慢指针就来到了链表的中间位置。

代码如下:

struct ListNode {
      int val;
      struct ListNode *next;
};

struct ListNode* middleNode(struct ListNode* head){
    struct ListNode *fast = head;
    struct ListNode *slow = head;
    while( (fast) && (fast->next)){
        slow = slow -> next;
        fast = fast -> next -> next;
    }
    return slow;
}

你可能感兴趣的:(链表的中间结点)