/*
* 在O(1)的时间内进行删除 分析:如果从前到后进行遍历查找从而进行删除节点,其时间复杂度为O(n)所以行不通
* 正确方法是:进行覆盖pToBeDelete节点,其.next覆盖
*/
public class 删除链表中的节点
{
private static void deleteListNOde(ListNode head,
ListNode toBeDeleteListNode)
{
if (head == null || toBeDeleteListNode == null)
{
return;
}
// 要删除的节点不是尾节点
if (toBeDeleteListNode.next != null)
{
// 进行覆盖
ListNode tempNode = toBeDeleteListNode.next;
toBeDeleteListNode.value = tempNode.value;
toBeDeleteListNode.next = tempNode.next;
tempNode = null;
}
else if (head == toBeDeleteListNode)
{// 链表只有一个节点,删除头节点也是尾节点
toBeDeleteListNode = null;
head = null;
}
else
{// 删除尾节点
// 先到到toBeDeleteListNode的前一个节点
ListNode tempNode = head;
while (tempNode.next != toBeDeleteListNode)
{
tempNode = tempNode.next;
}
tempNode.next = null;
}
}
}