Leetcode 19 删除链表的倒数第N个结点
一、题目
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
二、解法
首先遍历一次链表得到链表元素的个数num,再用num减去题目给出的参数n,恰好可以定位到待删除结点的上一个结点。
示例2提示我们需要用到虚拟头结点。
注意:使用虚拟头结点后num会增1,减去1即可。
/**
* 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) {
if(head==nullptr) return nullptr;
ListNode virnode(0,head),*p=&virnode;
int num=0;
while(p){
p=p->next;
num++;
}
p=&virnode;
int m=num-n-1;
while(m--){
p=p->next;
}
p->next=p->next->next;
return virnode.next;
}
};