删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
整体思路:
用堆栈储存节点,弹出倒数n个元素,找出倒数第n+1个元素,next指针指向next->next,跳过要删除的节点
代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
stack<ListNode*> list_stk;
ListNode* tmp = new ListNode;
tmp->next = head;
ListNode* tmp1 = nullptr;
ListNode* ret = tmp;
while (tmp!=nullptr) {
list_stk.push(tmp);
tmp = tmp->next;
}
for (int i = 0; i < n-1; i++) {
tmp1 = list_stk.top();
list_stk.pop();
}
list_stk.pop();
list_stk.top()->next = tmp1;
return ret->next;
}
};
复杂度分析
时间复杂度:O(n),n为链表长度
本文解析如何使用堆栈技巧高效地在链表中删除倒数第N个节点,通过O(n)时间复杂度实现,适合链表数据结构和算法初学者学习。
873

被折叠的 条评论
为什么被折叠?



