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

来源:互联网 发布:mysql配置环境变量 编辑:程序博客网 时间:2024/05/29 04:00
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;}}}

0 0
原创粉丝点击