乐趣区

关于数据结构与算法:Linklist经典题目删除链表位于倒序第N个位置的元素

题目形容
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。应用一趟扫描实现。
题目作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetb…
题解作者:WildDuck
题目剖析

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode* ListNode_pointer;


struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
    // 两个指针构建一个窗口套住固定间隔
    ListNode_pointer fast = head;
    ListNode_pointer slow = head;
    
    for(int i=0;i<n;i++)
    {fast = fast -> next;}
    
    while(fast != NULL && fast->next != NULL)
    {
        fast = fast -> next;
        slow = slow -> next;
    }
    
    if(fast == NULL)// 对仅含一个元素的链表非凡解决
    {
        head = head -> next;
        free(slow);
    }    
    else
    {
        ListNode_pointer free_p = slow->next;
        slow -> next = slow->next->next;
        free(free_p);
    }
    
    return head;
}


窗口套住固定间隔

退出移动版