淘先锋技术网

首页 1 2 3 4 5 6 7

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

来源:力扣(LeetCode)

双指针

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode *fast, *slow;

    fast = head;
    slow = head;

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

    return slow;
}