diff --git a/leetcode/src/876.c b/leetcode/src/876.c index b3b3a0a285..ebd0cc2fd1 100644 --- a/leetcode/src/876.c +++ b/leetcode/src/876.c @@ -1,19 +1,19 @@ -/** - * Definition for singly-linked list. - * struct ListNode { - * int val; - * struct ListNode *next; - * }; - */ +// Function to find the middle node of a linked list +// this contains the edge cases also +struct ListNode* middleNode(struct ListNode* head) { + // Check if the list is empty or has only one node + if (head == NULL || head->next == NULL) { + return head; + } + + struct ListNode* fast = head; + struct ListNode* slow = head; -struct ListNode *middleNode(struct ListNode *head) -{ - struct ListNode *fast, *slow; - fast = slow = head; - while (fast && fast->next) - { - slow = slow->next; - fast = fast->next->next; + // Use two pointers to find the middle node + while (fast != NULL && fast->next != NULL) { + fast = fast->next->next; // Move fast pointer two steps + slow = slow->next; // Move slow pointer one step } - return slow; -} + + return slow; // Slow will be at the middle node +} \ No newline at end of file