题目描述
给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
解题思路:
- 可以要删除的节点A的下一个节点B的值复制到当前节点,再删除节点B,即可实现在O(1)时间内删除节点。
- 如果要删除的节点A就是头节点,则将头节点置为null即可。
- 如果要删除的节点A是最后一个节点,则仍然需要使用遍历的方式。
代码
ListNode deleteNode(ListNode head, ListNode nodeToBeDel) {
if (head == null ) {
return null;
}
if (nodeToBeDel == null) {
return head;
}
if (nodeToBeDel.next != null) {
// 被删除的是中间节点
nodeToBeDel.value = nodeToBeDel.next.value;
nodeToBeDel.next = nodeToBeDel.next.next;
} else if (head == nodeToBeDel) {
// 被删除的是头节点
head = null;
}else {
// 被删除的是尾部节点
ListNode node = head;
while (node.next != nodeToBeDel) {
node = node.next;
}
node.next = null;
}
return head;
}