876. 链表的中间结点


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

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

   示例 1:

    输入:[1,2,3,4,5]
    输出:此列表中的结点 3 (序列化形式:[3,4,5])
==================================================

时间复杂度为O(n),空间复杂度为O(1)

class Solution {
public:
    ListNode* middleNode(ListNode* head) {
        ListNode* h = head;
        int i = 0;
        while (head!= nullptr) {
            i++;
            head = head->next;
        }
        i = i >> 1;
        while (i > 0) {
            h = h->next;
            i--;
        }
        return h;
    }
};

 看到有一个思路,快慢指针,绝了!又是一个小知识点!

相关