leetcode19.删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 个节点,并且返回链表的头结点。

算法分析:

(1)遍历单链表并计下单链表长度N,则被删除的节点位置为 (N-n),在第二趟遍历时移除这个节点;

(2)只使用一次扫描,需要额外增加一个指针遍历。两个指针 f 和 s,s 先前进 n 个单位,随后 f 和 s 一起前进,s 到达单链表末尾时 f 刚好位于要删除的节点。

代码如下:

    ListNode* removeNthFromEnd(ListNode* head, int n) {                
        ListNode* f = head;
        ListNode* s = head;
        
        for (int i = 0; i < n; i++) {
            s = s->next;
        }
//删除的节点是头节点
if (!s) { return head->next; }
     //删除当前节点需要获取前一个节点,所以这里遍历完 f 位于要删除节点的前一节点
while (s->next) { f = f->next; s = s->next; }
     //删除节点 f
->next = f->next->next; return head; }
原文地址:https://www.cnblogs.com/hanawasakuraki/p/9444026.html