13:在O(1)时间内删除单向链表中的一个节点
2017-03-14 12:44
295 查看
思路:如果从首部开始依次查找,那么时间是O(n).
既然我们知道要删除的结点i,那么我们就知道它指向的下一个结点j,那么我们可以将j的内容复制到i,然后将i的指针指向j的下一个结点,这样虽然看起来我们删除的是j结点,但是实际删除的是i。
此外还要考虑的问题是:如果结点不存在怎么办?如果结点是尾结点怎么办?链表只有一个结点?
既然我们知道要删除的结点i,那么我们就知道它指向的下一个结点j,那么我们可以将j的内容复制到i,然后将i的指针指向j的下一个结点,这样虽然看起来我们删除的是j结点,但是实际删除的是i。
此外还要考虑的问题是:如果结点不存在怎么办?如果结点是尾结点怎么办?链表只有一个结点?
public class deleteInode { public static void main(String[] args) { ListNode head = new ListNode(0); ListNode node1 = new ListNode(1); ListNode node2 = new ListNode(2); ListNode node3 = new ListNode(3); head.setNext(node1); node1.setNext(node2); node2.setNext(node3); delete(head,node2); printListNode(head); } public static void delete(ListNode head,ListNode target){ if(head==null||target==null){ return; } if(head.getNext()==null){ if(head==target){ head=null; }else{ return; } } if(target.getNext()==null){ ListNode currentNode = head; while(currentNode.getNext()!=null){ currentNode = currentNode.getNext(); } currentNode.setNext(null); } if(target.getNext()!=null){ target.setValue(target.getNext().getValue()); if(target.getNext().getNext()!=null){ target.setNext(target.getNext().getNext()); }else{ target.setNext(null); } } } public static void printListNode(ListNode head){ ListNode current = head; while(current!=null){ System.out.println(current.getValue()+"..."); current = current.getNext(); } } }
相关文章推荐
- 13 在O1的时间删除链表节点-使用一个节点指针
- O(1)时间内删除单向链表中的一个节点
- 单向链表在O(1)时间内删除一个节点
- 单向链表在O(1)时间内删除一个节点
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 在O(1)的时间内删除链表的一个节点
- 一个单向链表,只知道某个节点的指针p,但是p不是尾节点,请编程删除节点p.
- 删除单向链表中的某一个节点
- 1.01一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
- 面试题13:在O(1)时间删除链表节点
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 面试题13:在O(1)时间删除链表节点
- 面试题13:在O(1)时间删除链表节点
- O(1)时间删除链表中的节点 13
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 删除单向链表中的某一个节点
- 剑指offer面试题13-在O(1)时间删除链表的节点
- 剑指offer 面试题13—在O(1)时间删除链表节点
- 13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
- 剑指offer13-在O(1)时间删除链表节点