• [x] 19.删除链表的倒数第n个节点 :::info 双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。 ::: 代码:(详细注释)

      1. class Solution {
      2. public:
      3. ListNode* removeNthFromEnd(ListNode* head, int n) {
      4. ListNode* dummyHead = new ListNode(0);
      5. dummyHead->next = head;
      6. ListNode* slow = dummyHead;
      7. ListNode* fast = dummyHead;
      8. while(n-- && fast != NULL) {
      9. fast = fast->next;
      10. }
      11. fast = fast->next; // fast再提前走一步,因为需要让slow指向删除节点的上一个节点
      12. while (fast != NULL) {
      13. fast = fast->next;
      14. slow = slow->next;
      15. }
      16. ListNode *temp = slow->next;
      17. slow->next = slow->next->next;
      18. delete temp;
      19. return dummyHead->next;
      20. }
      21. };

      分析:
      经典