题目形容
给你一个链表,删除链表的倒数第 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;}
窗口套住固定间隔