LeetCode19题 删除链表的倒数第N个节点 (c++ 递归)

    科技2025-09-13  40

    LeetCode19题 删除链表的倒数第N个节点 (c++ 递归)

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

    示例:

    给定一个链表: 1->2->3->4->5, 和 n = 2.

    当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:

    给定的 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: int cnt=0; bool remove(ListNode *&a,int count) { if(a->next==NULL||remove(a->next,count)) //注意边界的情况 cnt++; if(cnt==count) a=a->next; return true; } ListNode* removeNthFromEnd(ListNode* head, int n) { remove(head,n); return head; } };

    Processed: 0.009, SQL: 8