2

このプログラムを試していますが、削除できません。実行は無限ループに入ります。また、リンクされたリストを適切に形成しているかどうかもわかりません。

次のプログラムで何が欠けていますか:

public class SpecificNodeRemoval {
private static class Node {
    String item;
    Node next;
    Node prev;

    private Node(String item, Node next, Node prev) {
        this.item = item;
        this.next = next;
        this.prev = prev;
    }
}

public static void main(String[] args) {
    int k = 3;

    Node fourth = new Node("Fourth", null, null);
    Node third = new Node("Third", fourth, null);
    Node second = new Node("Second", third, null);
    Node first = new Node("First", second, null);

    second.prev = first;
    third.prev = second;
    fourth.prev = third;
    Node list = first;

    Node result = removalKthNode(list, k);

    int j = 1;
    while(result.next!=null){
        System.out.println(j+": "+result.item);
    }
}

private static Node removalKthNode(Node first, int k) {
    Node temp = first;

    for(int i=1; i < k; i++) {
        temp = temp.next;
    }

    temp.prev.next = temp.next;
    temp.next.prev = temp.prev;

    return temp;
}
}

回答とコメントに感謝します..作業プログラムを以下に示します。

public class SpecificNodeRemoval {
private static class Node {
    String item;
    Node next;
    Node prev;

    private Node(String item, Node next, Node prev) {
        this.item = item;
        this.next = next;
        this.prev = prev;
    }
}

public static void main(String[] args) {
    int k = 3;

    Node fourth = new Node("Fourth", null, null);
    Node third = new Node("Third", fourth, null);
    Node second = new Node("Second", third, null);
    Node first = new Node("First", second, null);

    second.prev = first;
    third.prev = second;
    fourth.prev = third;
    Node list = first;

    Node result = removalKthNode(list, k);

    int j = 1;
    while(result != null){
        System.out.println(j+": "+result.item);
        result = result.next;
        j++;
    }
}

private static Node removalKthNode(Node first, int k) {
    Node temp = first;

    for(int i=1; i < k; i++) {
        temp = temp.next;
    }

    temp.prev.next = temp.next;
    temp.next.prev = temp.prev;

    return first;
}
}

出力は次のとおりです。 1: 1 番目 2: 2 番目 3: 4 番目

4

5 に答える 5

4

これが犯人のようです。

while(result.next!=null){
    System.out.println(j+": "+result.item);
}

リンクされたリストで先に進んでいません。

何を意図したのか正確にはわかりませんが、無限ループを避けるために次のように記述したい場合があります...

while(result !=null){
    System.out.println(j+": "+result.item);
    result = result.next;
    j++;
}

ただし、リンクされたリスト全体を出力したい場合は、removalKthNode 関数から返された値で結果を初期化しないでください。最初から始めるべきです。

これが理にかなっていることを願っています。

于 2013-10-31T06:37:27.040 に答える
1

コードにいくつかの問題があります。

1)removalKthNodeメソッドはリストの最初の要素を返して、コードが意味のある結果を出力するようにする必要があります (または、残りのリストを出力するには、最初の要素に再度移動する必要があります。

2)whileリストを出力するループが 2 か所間違っています。

a) j をインクリメントしないため、アイテムの位置は常に同じになります。

b)実際にはそのリストを反復処理しません。つまり、 variable を再割り当てしませんresult。次のようなことを試してください:

 int j = 1;
 while (result != null) {
     System.out.println(j++ + ": " + result.item);
     result = result.next;
 }
于 2013-10-31T06:38:53.530 に答える
0

コード

Node result = removalKthNode(list, k);
now result = Third 

while ループは while(result. next!=null) としてあり、これは常に 3 番目の要素にあるため、無限ループになります。以下のように結果を変更します

 while(result!=null){
        System.out.println(j+": "+result.item);
        result = result.next;
    }
于 2013-10-31T06:39:26.450 に答える
0

これを試してみてください: タスクを達成するのに役立つかもしれません:

    package com.amazon;






class Linkedlist{

    Node head;

    public Linkedlist() {
        head = null;
    }


    public  Node addNode(int data){

        Node newNode = new Node(data);
        if(head==null) head = newNode;
        else{
            Node current = head;
            while(current.next!=null){
            current = current.next;
            }
            current.next = newNode;
        }
        return newNode;
    }

}

class Node
{
    Node next;
    int data;

    Node(int d)
    {
        data = d;
        next = null;
    }
}

public class DeleteEveryKthNodes {



    void modifyList(Node head,int k){

        Node current = head;
        Node previous = null;
        Node newHead = null;
        if(current==null)return;
        int count;
        while (current != null) {
            for (count = 1; count < k && current != null; count++) {
                previous = current;
                current = current.next; // 1--2--3--4--5
            }

            if (current != null) {
                Node temp = current;
                previous.next = current.next;
                // current = null;
                temp = null;
                current = current.next;
            }
        }

         current = head;
        while(current!=null){
            System.out.print(" "+current.data);
            current = current.next;
        }
    }

    public static void main(String args[]) {


    Linkedlist list = new Linkedlist();

    list.head = new Node(1);
    list.head.next = new Node(2);
    list.head.next.next = new Node(3);
    list.head.next.next.next = new Node(4);
    list.head.next.next.next.next = new Node(5);

    new DeleteEveryKthNodes().modifyList(list.head, 2);
    //list.head.next.next.next.next = new Node(1);



}
}
于 2016-09-28T02:03:40.820 に答える