给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。
Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4
复制节点的值
删除节点一般的做法是找到要删除节点的前一个节点,然后把这个节点的next指针指向要删除的节点的下一个节点,一般都是这样做的,这个题要求O(1)的时间复杂度,显然是不允许遍历搜索的,而且给定的是节点的指针。
我们要删除这个节点,但是我们通过操作只能删除它的下一个节点,那我们能不能把下一个节点的数据拷贝过来到这个节点,然后把下个节点删除,这样就相当于把这个节点删除了
我怎么会想到这个方法呢?哎,刷题容易怀疑智商!
写起来就不是一般的简单了,题目中默认此节点不是表头或表尾,所以这种方法是完全可以的,如果是表尾的话就不好玩了!
void deleteNode(ListNode * node) {
node->val=node->next->val;
node->next=node->next->next;
// write your code here
}