给定指向该节点的指针,删除链表的最后一个节点

tmg*_*mgr 3 java algorithm linked-list data-structures

我正在尝试删除链表的最后一个节点,只给出了指向该节点的指针。

我写了下面的实现,但是没有用。

我已经访问了有关此主题的大多数SO问题,但是如果只有一个指向该节点的指针,它们都没有显示如何删除链表的最后一个节点?

我在这里想念什么吗?

class Node {

        Node next;
        int value;

        Node(int val) {
                this.value = val;
                this.next = null;
        }

        @Override
        public String toString() {
                Node cur = this;
                String str = "";

                while(cur != null) {
                        str += cur.value+"->";
                        cur = cur.next;
                }

                return str;
        }
}

class DeleteNodeLL {

    public static void deleteNode(Node current) {
        Node temp;
        if(current.next == null) {
            current = null;
            return;
        } else {
            current.value = current.next.value;
            temp = current.next;
            temp = null;
            current.next = current.next.next;
        }

    }
    public static void main(String [] args) {

        Node n1 = new Node(25);
        Node n2 = new Node(1);
        Node n3 = new Node(36);
        Node n4 = new Node(9);
        Node n5 = new Node(14);

        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        n4.next = n5;
        n5.next = null;

        System.out.println("Original linkedlist :");
        System.out.println(n1);

        System.out.println();

        System.out.println("After deleting a node :");
        deleteNode(n5);
        System.out.println(n1);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:-

原始链表:
25-> 1-> 36-> 9-> 14->

删除节点后:
25-> 1-> 36-> 9-> 14->

asi*_*d88 5

使用单链列表是不可能的。
这是在Big Shot公司中通常会提出的面试问题,这些问题侧重于数据结构。
问题被表述为“删除仅给出指向该节点的指针的单个链表中的节点”的
预期解决方案:

public void deleteNode(Node n)
{
    if(n==null || n.next==null)
    {
        System.out.println("Delete not possible");
        return;
    }

    n.data = n.next.data;
    Node tmp = n.next;
    n.next = n.next.next;
    tmp.next = null;

    System.out.println("Node Deleted");
}
Run Code Online (Sandbox Code Playgroud)

这个想法是将数据从下一个节点复制到当前节点,然后删除下一个节点。如果该节点是最后一个节点,则该解决方案不起作用(这是候选人必须在面试中讨论并指出的问题)

希望对您有帮助!(解决问题的方法很棘手,并且不存在)