• 在O(1)的时间复杂度下删除节点
    • 题目
    • 解题思路

    在O(1)的时间复杂度下删除节点

    题目

    给定单向链表的头指针以及待删除的指针,定义一个函数在 O(1) 的时间复杂度下删除

    解题思路

    1. 待删除节点非尾节点,将后一个节点的值复制到当前节点,然后删除后一个节点
    2. 待删除节点为尾节点,从头节点开始,找到待删除节点的前一个节点进行删除
    1. public void O1DeleteNode(ListNode head, ListNode needDelete) {
    2. if (needDelete.next != null) {
    3. ListNode next = needDelete.next.next;
    4. needDelete.val = needDelete.next.val;
    5. needDelete.next = next;
    6. } else {
    7. ListNode cursor = head;
    8. while (cursor != null) {
    9. if (cursor.next == needDelete) break;
    10. cursor = cursor.next;
    11. }
    12. if (cursor == null) return;
    13. cursor.next = needDelete.next;
    14. }
    15. }