package java_study.JianZhiOffer;
import org.junit.Test;
import java.util.Random;
/**
* Created by ethan on 2015/6/23.
* 剑指offer: No13在O1时间内删除一个结点
* 删除后一个结点, 将后结点的值赋给前结点
*/
public class No13在O1时间内删除一个结点 {
public Node listNode = init(5);
public Node init(int len){
Node head = new Node();
Node tmp = head;
Random random = new Random();
for (int i=0; i<len; i++){
Node node = new Node(random.nextInt(30));
tmp.setNext(node);
tmp = tmp.getNext();
}
return head.getNext();
}
public void print_linkedList(Node listNode){
while (listNode!=null){
System.out.print(listNode.getValue() + " ");
listNode = listNode.getNext();
}
System.out.println();
}
public void removeOneNode(Node head, Node p){
// 当p为最后一个结点的时候
if (p.getNext()==null){
Node tmp = head;
while (tmp.getNext()!=p)
tmp = tmp.getNext();
tmp.setNext(null);
p = null;
}else {
Node pNext = p.getNext();
p.setValue(pNext.getValue());
p.setNext(pNext.getNext());
pNext=null;
}
}
@Test
public void test(){
print_linkedList(listNode);
removeOneNode(listNode, listNode.getNext().getNext().getNext().getNext());
print_linkedList(listNode);
}
}