package com.camnter.basicexercises.linklist; import com.camnter.basicexercises.core.Node; /** * 一种怪异的方式删除节点 *

* 不给头结点,要气时间复杂度 O(1) *

*

* 比如 1 2 3 4 * 要删除 2 节点 * 那么将 2 节点后一个节点的值,赋值到 2 上 * 1 3 3 4 * 2 节点指向 2 的 下下个节点 * 1 3 | 3 | 4 * 1 3 4 * 就把 2 节点的下个节点删除 * 然后 2 节点的值变为 3 *

* 这是一种从值上表达删除节点的方式 * 从引用角度来说,并没用删除 *

* 而且这种方式无法处理尾节点 * * @author CaMnter */ public class WeirdWayToDeleteNodes { public void weirdWayToDeleteNodes(Node target) { if (target == null) return; if (target.next == null) return; Node next = target.next; target.value = next.value; target.next = next.next; } public static void main(String[] args) { // 1 2 3 4 5 6 Node head = Node.getLinkList(); // 4 Node target = head.next.next.next; WeirdWayToDeleteNodes weirdWayToDeleteNodes = new WeirdWayToDeleteNodes(); weirdWayToDeleteNodes.weirdWayToDeleteNodes(target); Node.printLinkList(head); } }