题目来源于知识星球—英雄算法联盟,一月算法集训专题
前言
经过漫长的休息之后,在寒假以及新年到来之际再次刷起算法,培养自己的算法素养和算法思维,加油!今天只有一道题。
19.删除链表的倒数第N个结点(中等)
1.题目描述
2.解题思路
用递归的方式复制链表,先递后归,原链表最后一个节点最先被复制,使用全局变量tag记录被复制的节点的个数,当tag等于n时,跳过删除的节点。
3.代码演示(C++)
class Solution
{
public:
int tag=0;//记录已被复制的节点数
ListNode *removeNthFromEnd(ListNode *head, int n)
{
while (head==NULL)
{
return NULL;
}
ListNode *ans = removeNthFromEnd(head->next, n);
ListNode *temp=new ListNode;
tag++;
if(tag==n)return ans;//跳过要删除的结点
temp->val = head->val;
temp->next = ans;
return temp;
}
};