3

そのノードへのポインタのみを指定して、リンクリストの最後のノードを削除しようとしています。

以下の実装を書きましたが、動作しません。

私はすでにこの主題に関するSOの質問の大部分を訪れましたが、そのノードへのポインタが1つしかない場合、リンクされたリストの最後のノードを削除する方法を示しているものはありませんか?

ここに何か欠けていますか?

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);
    }
}

出力:-

元のリンクリスト:
25->1->36->9->14->

ノード削除後:
25→1→36→9→14→

4

5 に答える 5

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");
}

アイデアは、次のノードから現在のノードにデータをコピーし、次のノードを削除することです。ノードが最後のノードである場合、ソリューションは機能しません (これは、候補者が面接で議論し、指摘しなければならないことです)

それがあなたを助けることを願っています! (あなたの問題の解決策はひっかけ問題であり、存在しません)

于 2013-07-09T04:27:18.267 に答える