程式語言 - LeetCode - C - 2095. Delete the Middle Node of a Linked List



題目:


解答:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteMiddle(struct ListNode* head)
{
    int cnt = 0;
    struct ListNode *pre = NULL;
    struct ListNode *cur = NULL;

    cur = head;
    while (cur) {
        cur = cur->next;
        cnt += 1;
    }
    cnt >>= 1;

    if (cnt == 0) {
        return NULL;
    }

    cur = head;
    pre = head;
    while (cnt--) {
        pre = cur;
        cur = cur->next;
    }
    pre->next = cur->next;

    return head;
}