面试题13:在o(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。

如果我们把下一个节点的内容复制到要删除的节点上覆盖原有的内容,再把下一个节点删除,那是不是就相当于把当前要删除的节点删除了?

解答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void (ListNode head,ListNode deListNode){
if(deListNode == null || head == null){
return ;
}
if(head == deListNode){
head =null;
}
else{
if(deListNode.next == null){
ListNode pinitListNode = head;
while(pinitListNode.next.next != null){
pinitListNode = pinitListNode.next;
}
pinitListNode.next = null;
}else{
deListNode.data = deListNode.next.data;
deListNode.next = deListNode.next.next;
}
}
}