在 O(1) 工夫内删除链表节点

题目形容

在 O(1) 工夫内删除链表节点。

计划:如果该节点不是尾节点,那么能够间接将下一个节点的值赋给该节点,而后令该节点指向下下个节点,再删除下一个节点,工夫复杂度为 O(1)。否则,就须要先遍历链表,找到节点的前一个节点,而后让前一个节点指向 null,工夫复杂度为 O(N)。

题目链接: [在 O(1) 工夫内删除链表节点]()

代码

/** * 在 O(1) 工夫内删除链表节点 */public class Jz69 {    /**     * 计划:     * 如果该节点不是尾节点,那么能够间接将下一个节点的值赋给该节点,而后令该节点指向下下个节点,再删除下一个节点,工夫复杂度为 O(1)。     * 否则,就须要先遍历链表,找到节点的前一个节点,而后让前一个节点指向 null,工夫复杂度为 O(N)。     *     * @param head     * @param tobeDelete     * @return     */    public ListNode deleteNode(ListNode head, ListNode tobeDelete) {        if (head == null || tobeDelete == null) {            return null;        }        if (tobeDelete.next != null) {            // 要删除的节点不是尾结点            ListNode next = tobeDelete.next;            tobeDelete.val = next.val;            tobeDelete.next = next.next;        } else {            if (head == tobeDelete) {                // 只有一个节点                head = null;            } else {                ListNode cur = head;                while (cur.next != tobeDelete) {                    cur = cur.next;                }                cur.next = null;            }        }        return head;    }    public static void main(String[] args) {        }}
【每日寄语】 窦燕山,有义方;教五子,名俱扬。