-1

以下は、二重リンクリストの中間ノードを見つけるための私のコードですが、奇数のノードに対してのみ機能します。偶数のノードの場合の対処方法がわかりません。

public Object findMiddleNode() {
    DLNode first = getHeadNode();
    DLNode last = getTailNode();
    while(first!=last) {
        first = first.getNext();
        last = last.getPrevious();
    }
    return first.getElement();      
}

これは私の更新されたコードです:

public MyDequeue findMiddleNode() {
    DLNode first = getHeadNode();
    DLNode last = getTailNode();
    MyDequeue m = new MyDequeue();
    while(first!=last && first.getNext()!= last) {
        first = first.getNext();
        last = last.getPrevious();
    }
    if(first == last) {
        m.insertLast(first.getElement());           
        return m;
    }           
    else {
        m.insertLast(first.getElement());
        m.insertLast(last.getElement());
        return m;
    }
}

クラスMyDequeueは、二重リンクリストの実装です。MyDequeueを返した理由は、二重にリンクされたリストの要素を印刷する静的なprintメソッドがすでにあるためです。

4

3 に答える 3

1

偶数のノードの場合、最初と最後は中央で互いにすれ違う。たとえば、4つのノード1..4がある場合、最後が3のときに最初は2になります。次の反復では、最初は3になり、最後は2になります。したがって、whileループテストに失敗することはありません(最初!=最後)適切なポイントでループを終了する必要があります。簡単な修正は、whileテストを次のように変更することです。

while ((first != last) && (first.getNext() != last)) {

于 2012-09-11T20:55:37.017 に答える
1
This is my code in java 
import java.util.LinkedList;

public class DeleteMiddleLinkedList {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        DeleteMiddleLinkedList ds = new DeleteMiddleLinkedList();
        ds.middleDelete(list, "");

        for (String s : list) {
            System.out.println(s);
        }

    }

    public void middleDelete(LinkedList<String> list, String s) {
        int size = list.size();

        if (list == null) {
            return;
        }

        if (size % 2 == 0) {
            list.remove(size / 2);
            list.remove((size / 2) - 1);
        } else if (size % 2 != 0) {
            list.remove((size / 2));
        }

    }

}
于 2012-11-28T07:11:32.903 に答える
0

これは私の更新されたコードです:

public MyDequeue findMiddleNode() 
{
    DLNode first = getHeadNode();
    DLNode last = getTailNode();
    MyDequeue m = new MyDequeue();
    while(first!=last && first.getNext()!= last) 
    {
        first = first.getNext();
        last = last.getPrevious();
    }
    if(first == last) 
    {
        m.insertLast(first.getElement());           
        return m;
    }           
    else 
    {
        m.insertLast(first.getElement());
        m.insertLast(last.getElement());
        return m;
    }
}

クラスMyDequeueは、二重リンクリストの実装です。MyDequeueを返した理由はbcuzです。二重にリンクされたリストの要素を印刷する静的なprintメソッドがすでにありました。より良い解決策のための提案はありますか?

于 2012-09-12T04:38:01.497 に答える