您的位置:首页 > Web前端

剑指offer 13. 在O(1)时间删除链表节点

2017-05-15 14:27 405 查看
class ListNode {
int data;
ListNode next;
}

// 题目:给一个链表和其中一个结点,要在O(1)的时间复杂度删除这个结点
// 解法:将这个结点后面结点的数据拷贝到这个结点,删除之后的一个结点
public class Main {

public static void main(String[] args) {
ListNode n1 = new ListNode();
ListNode n2 = new ListNode();
ListNode n3 = new ListNode();
ListNode n4 = new ListNode();
n1.data = 1;
n2.data = 2;
n3.data = 3;
n4.data = 4;
n1.next = n2;
n2.next = n3;
n3.next = n4;
deleteNode(n1,n1);
while(n1!=null){
System.out.print(n1.data+" ");
n1 = n1.next;
}
}

public static void deleteNode(ListNode head, ListNode node) {
if(node == null || head == null){							//若链表或要删除的结点为空,则直接返回
return;
}
if(node.next == null){										//如果要删除的结点是最后一个结点
if(head == node){										//判断是否只有这一个结点
return;
}else{													//如果有许多结点就直接删除最后一个结点
while(head.next != node){
head = head.next;
}
head.next = null;
return;
}
}else{														//如果不是最后一个结点就将删除节点后面结点的数据复制到这个结点并删除后面的结点
node.data = node.next.data;
node.next = node.next.next;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: