/**
* 从无头单链表中删除一个既不是头结点,也不是尾节点节点
* @author Sking
*/
package 链表问题;
public class 无头单链表删节点 {
/**
* 链表节点类
* @author Sking
*/
protected class ChainNode {
public Object element;
public ChainNode next;
public ChainNode(Object element, ChainNode next) {
this.element = element;
this.next = next;
}
}
/**
* 从无头单链表中删除节点问题:
* 假设有一个没有头指针的单链表,一个指针指向此单链表的中间一
* 个节点(不是第一个也不是最后一个),将此节点从此链表中删除。
*
* 假设链表如下...A->B->C->D..(D可能为空),现在要删除节点B.
* 由于将B节点删除后,将分割链表(无法通过指针追溯到A),所以
* 换个角度:将C的数据域赋值给B的数据域,然后删除C(狸猫换太子)
* @param current 待删除的节点
*/
public static void DeleteRandomNode(ChainNode current){
ChainNode pnext=current.next;
if(pnext!=null){
current.next=pnext.next;
current.element=pnext.element;
pnext=null;
}
}
}