问题:在O(1)时间复杂度完成对单向链表中某一节点的删除
输入:被删除节点指针
思路:不能从头开始遍历至被删除节点的上一个节点,将其下一个指针指向被删除节点的下一个节点,时间复杂度为O(n),不满足题目给定条件。因此,采用以下方法:
把被删除节点的下一个节点的值赋给被删除节点,再把下一个节点删除。
代码:
class Solution {
public:
void deleteNode(ListNode* node) {
ListNode* pNext=node->next;
node->val = pNext->val;
node->next = pNext->next;
delete pNext;
pNext=nullptr;
}
};
复杂度分析:时间复杂度O(1),空间复杂度O(1).