19. 删除链表的倒数第 N 个结点

题目:
19. 删除链表的倒数第 N 个结点_第1张图片
思考:

  1. 删除倒数第n个节点,首先要找到倒数第n+1个节点
  2. 采用双指针,可以快速找到
  3. 要额外注意头结点的特殊情况
  4. 使用额外空间pre作为新的空白头结点,便于处理

实现:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* pre=new ListNode();
        pre->next=head;
        ListNode* p=pre;
        ListNode* q=head;


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

        while(q->next)
        {
            p=p->next;
            q=q->next;
        }

        p->next=p->next->next;
        
        return pre->next;
    }
};

你可能感兴趣的:(算法题,链表,数据结构,双指针,算法)