题目:
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
思路:
正常删除链表节点的思路为找到待删除节点的前一个节点,使该节点的next指针指向待删除节点的下一个节点即可,但这种思路的时间复杂度为O(n)。与题目要求不符。根据
《剑指offer》的思路,可以将待删除节点的值修改为其下一个节点的值,然后将待删除节点的next指针指向下下个节点。但需要特别注意的是特殊情况:待删除的节点是尾节点;原链表只有一个节点。
代码:
1 | public ListNode deleteNode(ListNode head,ListNode pToBeDeleted) { |
复杂度分析:
时间复杂度:
O(n)。
空间复杂度:
O(1)。