0

私はしばらくの間、単一のリンクリスト内のノードのポインターをスワップすることを達成しようと試みてきましたが、多くの成功はありませんでした。以前の質問ですが、私は何か間違ったことをしているようです..)

コードは次のとおりです。

public void implementation() {
    count = new long[5];

    for (int i = 0; i <= 4; i++) {
        count[i] = count2++;
    }

    Link[] nodeList2 = LinkList.Insert_Link(count,count.length);

    for (int i = 0; i < nodeList2.length - 1; i++) {
        nodeList2[i].next = nodeList2[i + 1];
    }

    for (int i = 0; i < nodeList2.length -  1; i += 2) {
        LinkList.Swap_Node_Pointers(nodeList2[i], nodeList2[i + 1]);
    }

    // LinkList.Swap_Node_Pointers(nodeList2[1], nodeList2[1 + 1]);

    LinkList.display(nodeList2);       
}

Insert、Swap_Node_Points、および表示のコードは次のとおりです。

public Link[] Insert_Link(long[] value, int countlength) {        
    final Link[] nodeList = new Link[countlength] ;

    for (int i = 0; i < nodeList.length; i++) {    
        nodeList[i] = new Link();
        nodeList[i].value2 = value[i];
    }

    return nodeList;
}

public void display(Link[] b) {
    Link[] nodeList2 = b;

    for (int i = 0; i < nodeList2.length; i++) {            
        System.out.println("The value is" +nodeList2[i].value2);
        System.out.println("");
    }
}

public void Swap_Node_Values(final Link n1, final Link n2) {  
    long value; 
    // Link temp = null;

    value = n1.value2;
    n1.value2 = n2.value2;
    n2.value2 = value;
}

public void Swap_Node_Pointers(Link n1, Link n2) {      
    Link temp =  n1.next;     
    n1.next = n2.next;
    n2.next = temp;
}
4

1 に答える 1

1

リンクされたリスト内のノード (のポインター) を交換しても意味がありません。値オブジェクト (のポインター) を交換するだけです (コードで実際に行っているように)。実際の実装を書く前に、インターフェイスの設計から始めます。

Java では、一重リンク リストと二重リンク リストのパフォーマンスの違いは非常に大きいため、デフォルトの LinkedList 実装を使用します。そうは言っても、タスクを達成するために使用できるインターフェイス/クラスを書きました。

public class ValueHolder<T> {
  private T value;

  public ValueHolder(T value) {
    this.value = value;
  }

  public T getValue() {
    return value;
  }

  public void setValue(T value) {
    this.value = value;
  }

  public void swap(ValueHolder<T> valueHolder) {
    T temp = getValue();
    setValue(valueHolder.getValue());
    valueHolder.setValue(temp);
  }

  @Override
  public String toString() {
    return getValue() != null ? getValue().toString() : null;
  }
}

public interface SinglyLinkedList<T> extends Iterable<T> {
  public void add(T value);
}

public class SystemOutPrinter {
   public <T> void print(Iterable<T> iterable) {
      Iterator<T> it = iterable.iterator();
      while (it.hasNext()) {
         System.out.println("Value: " + it.next());
      }
   }
}

...

// ValueHolders contain the actual values
ValueHolder<MyObject> vh1 = new ObjectValueHolder<MyObject>(obj1);
ValueHolder<MyObject> vh2 = new ObjectValueHolder<MyObject>(obj2);
// Create list
SinglyLinkedList<ValueHolder<MyObject>> list = new DefaultSinglyLinkedList<ValueHolder<MyObject>>();
// Add valueHolders to list
list.add(vh1);
list.add(vh2);
// Print
new SystemOutPrinter().print(list);
// Swap
vh1.swap(vh2);
// Print
new SystemOutPrinter().print(list);
于 2013-08-31T08:53:21.333 に答える