题目
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
分析
- 尾结点,删除结点位于尾部时,需要遍历得到该结点的前一结点。
- 非尾结点,把后一节点的内容复制到该结点,该结点指向下下结点;
代码
public class DeleteNode {
class Node{
public int data;
public Node next;
}
/**
* O(1)复杂度删除某结点
* @param head 头结点
* @param toBeDeleted 删除结点
*/
public static void Node(Node head,Node toBeDeleted){
if (head==null||toBeDeleted==null){
return;
}
if (toBeDeleted.next!=null){
toBeDeleted.data=toBeDeleted.next.data;
toBeDeleted.next=toBeDeleted.next.next;
}
}else {
Node tempNode=head;
while (tempNode.next!=null){
tempNode=tempNode.next;
}
tempNode.next=null;
}
}
}