题目描述
给定单向链表的一个节点指针,定义一个函数在 O ( 1 ) O(1) O(1) 时间删除该节点。
假设链表一定存在,并且该节点一定不是尾结点。
样例
Input: 链表: 1->4->6->8
删除节点:下标为2的节点
Output: 新链表:1->4->8
解题思路
-
描述
正常情况下不可能通过 O ( 1 ) O(1) O(1) 时间就实现删除一个节点。但是题目要求,就只能使用特殊做法了——将下一个节点内容赋值给本节点,删除下一个节点即可。
-
实现代码:
/* struct ListNode { int val; ListNode* next; } */ void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next->next; }
-
复杂度分析
时间复杂度: O ( 1 ) O(1) O(1)
空间复杂度: O ( 0 ) O(0) O(0)