题目如下:
给定单向链表的头指针和一个节点指针,定义在一个函数在O(1)时间内删除该节点。
public class ListNode {
ListNode next;
int value;
public ListNode(int value){
this.value = value;
}
}
测试类如下:
public class LinkTest {
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(4);
ListNode node3 = new ListNode(5);
ListNode node4 = new ListNode(6);
ListNode node5 = new ListNode(7);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
deleteNode(node1,node2);
while (node1 != null){
System.out.println(node1.value + ",");
node1 = node1.next;
}
}
//node1表示头节点,node2表示要删除的节点
private static void deleteNode(ListNode node1, ListNode node2){
if(node1 == null || node2 == null){
return;
}
ListNode preNode = node1;
if(preNode.next == null){
while (preNode.next != node2){
preNode = preNode.next;
}
preNode.next = null;
}else{
/**
* 我们直接让删除节点的值等于删除节点的下一个节点值
* 再将删除节点的next赋值为删除节点的.next.next 起到间接删除的效果
*/
node2.value = node2.next.value;
node2.next = node2.next.next;
}
}
}