zoukankan      html  css  js  c++  java
  • 剑指offer-在O(1)时间删除链表节点

    题目描述

    给定单链表的头结点和待删除结点,在O(1)时间删除链表节点

    class ListNode {
            int value;
            ListNode next;
        }
        /**
         * 常规方法从链表头结点沿着链表找到待删除结点完成删除操作。时间复杂度O(n)
         * 可以将待删除结点的下一结点内容复制到待删除结点上,将待删除结点的下一结点指向待删除结点的的下一结点的下一结点。
         * 时间复杂度O(1)
         * @param head
         * @param toBeDeleted
         * @return
         */
        public ListNode delete(ListNode head, ListNode toBeDeleted) {
            // 如果输入有空值,就返回头结点
            if (head == null || toBeDeleted == null)
                return head;
    
            // 如果删除的是头结点,,返回头结点的下一结点
            if (head == toBeDeleted) {
                return head.next;
            }
    
            // 如果待删除的是最后一个结点,从头结点顺序遍历到该节点的前序节点,再删除该节点。
            if (toBeDeleted.next == null) {
                ListNode temp = head;
                while (temp.next != toBeDeleted) {
                    temp = temp.next;
                }
                temp.next = null;
            } else { // 待删除结点在链表中间 
                // 待删除结点的下一结点的值覆盖待删除结点的值
                toBeDeleted.value = toBeDeleted.next.value;
                // 待删除结点的下一结点指向待删除结点的的下一结点的下一结点。
                toBeDeleted.next = toBeDeleted.next.next;
            }
            return head;
  • 相关阅读:
    vijos 1894 セチの祈り
    luogu p1378 经验之谈
    審視自己
    高斯消去法的相關拓展
    通用汇点
    重征之战
    有文化的人吟了一句诗
    2016年7月总结
    BZOJ 1026: [SCOI2009]windy数
    BZOJ 1047: [HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/zywu/p/5769695.html
Copyright © 2011-2022 走看看