剑指offer——在O(1)时间删除链表节点

自己只能想到o(n)的方法,从头节点遍历,看下一个节点是不是待删除节点。

其实,不一定需要找待删除节点的前一个节点,只要将待删除节点下一个的值复制给待删除节点,将待删除节点的next指针指向next->next,这样就相当于删除了 要删除的节点。

需要注意的几种情况:

(1)有多个节点,删除了头节点。这时头节点指向下一个节点。

(2)只有一个节点,删除了头节点。这时头节点指针指向NULL。

(3)有多个节点,删除尾节点。这时只能从头遍历到尾节点,时间复杂度o(n),但对于其他n-1个节点,时间复杂度o(1),总的时间复杂度[(n-1)*o(1)+o(n)]/n  还是o(1)。


猜你喜欢

转载自blog.csdn.net/eartha1995/article/details/81066025