个人技术分享

https://leetcode.cn/problems/SLwz0R/


这道题我们可以设一个哨兵位,然后把要遍历链表的结点指向该哨兵位。最后用for循环将指针指向要删除结点的前一个。

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode* dummy = malloc(sizeof(struct ListNode));
    dummy->val = 0, dummy->next = head;
    struct ListNode* cur = head;
    int count = 0;
    while(cur)
    {
        ++count;
        cur = cur->next;
    }

    cur = dummy;
   
        for(int i =1 ; i< count - n +1 ; ++i)
        {
            cur = cur->next;
        }
        cur->next = cur->next->next;

        cur = dummy->next;
        free(dummy);


    return cur;
}