美文网首页
删除链表中的节点

删除链表中的节点

作者: 灰化肥发黑会挥发 | 来源:发表于2018-12-25 15:52 被阅读0次

    在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。

    给定了头指定和节点指针,删除节点指针,要求时间为O(1),如果按照先查找当前节点的前面节点,再删除该节点,需要O(n)的时间复杂度。假设将后一个节点的值复制到当前节点,然后当前节点.next = 当前节点.next.next,也相当于删除了节点,但需要注意的是当前节点可能为最后一个节点,当前节点为第一个节点,需要边界值处理。

    public class DELETENODE {
        public ListNode DeleteNode(ListNode head,ListNode toBeDeleted){
            //首先判断输入是否合法
            if(head==null||toBeDeleted==null)
                return null;
            //当删除节点不是尾节点时候
            if(toBeDeleted.next!=null){
                toBeDeleted.val = toBeDeleted.next.val;
                toBeDeleted.next = toBeDeleted.next.next;
                return head;
            }
            //假设链表中只有一个节点
            else if(toBeDeleted==head){
                return null;
            }
            else{
                ListNode node = head;
                while(node.next!=toBeDeleted){
                    node = node.next;
                }
                node.next= null;
            }
            return head;
        }
    }
    ```
    需要注意的是上述代码假定toBeDeleted在链表中,这种情况没有考虑到。

    相关文章

      网友评论

          本文标题:删除链表中的节点

          本文链接:https://www.haomeiwen.com/subject/rfdflqtx.html