题目:
写一个函数delectNode(Node header,Node delectNode),在O(1)的时间删除该节点。
输入:
输入一个头插法的单链表。从头到尾是321,要删除的节点是链表头
输出:
21
解题思路:
目前想到有两种,第一种效率较高,我们可以获得要删除的节点的下一个节点,我们只要把下一个节点复制给当前节点就可以了。但是还需要考虑几个问题,要删除的节点是否为空,要删除的节点是否为头结点或者是尾节点,这些我们都需要分别去考虑。第二种就是从头结点遍历,找到要删除的节点,然后删除,这样做的缺点是跟题目不符,时间复杂度为0(n).
java代码实现:
public static void main(String[] args) {
Linked linker=new Linked();
linker.insertFirst(new Node(1));
linker.insertFirst(new Node(2));
Node node3=new Node(3);
linker.insertFirst(node3);
linker.display(linker.header);
delectNode(linker.header, node3);
System.out.println();
linker.display(linker.header);
}
public static void delectNode(Node header,Node node){
if(header==null && node==null){
return;
}
if(node.next!=null){
node.data=node.next.data;
node.next=node.next.next;
}
else if(node==header){
header=null;
} else{
Node headers=header;
while(headers.next!=node){
headers=headers.next;
}
headers.next=null;
}
}