Day04 删除链表中倒数第N个节点

38 阅读1分钟

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

题目链接

题目描述

给你一个链表,删除链表的倒数第n个节点,返回链表的头节点。

思路
  • 创建指针,遍历链表至链表尾部,计算链表长度
  • 从后向前遍历至倒数第n+1 个节点
  • 删除第n个节点
代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        //创建虚拟头节点
        ListNode* dummy = new ListNode(0, head);
        ListNode* p = dummy;
        int len = -1;
        while(p){
            p = p->next;
            len++;
        }
        //将指针重新指向头部
        p = dummy;
        for(int i = 0; i < len - n ; i++){
            p = p->next;
        }
        p->next = p->next->next;
        ListNode* ans = dummy -> next;
        delete dummy;
        return ans;
​
    }
};