1

私はリングとして働くためにこのリストを作りました。ここで 2 番目、3 番目の要素の以前のオブジェクトを取得できます。しかし、最後の要素の前の要素を取得しようとすると、null が返されます。誰でもこのコードを修正できますか。

指輪

class Ring {

Customer ptr;

void add(Customer customer) {
    Customer temp = customer;
    if (ptr == null) {
        ptr = temp;
    } else {
        Customer x = ptr;
        Customer n = ptr;
        while (x.next != null) {
            x = x.next;
            n.next.prev = n;
            n = n.next;
        }
        x.next = temp;
    }

}

void printList() {
    Customer temp = ptr;
    System.out.println(temp.next.next.next.prev);
    while (temp != null) {
        //System.out.println(temp);
        temp = temp.next;
    }
}
}

主要

class Main {

public static void main(String args[]) {
    Ring list = new Ring();
    Customer c1 = new Customer("10011", "A");
    Customer c2 = new Customer("10012", "B");
    Customer c3 = new Customer("10013", "C");
    Customer c4 = new Customer("10014", "D");
    list.add(c1);
    list.add(c2);
    list.add(c3);
    list.add(c4);

    list.printList();

}
}

お客様

class Customer {

String id;
String name;
Customer next;
Customer prev;

public Customer(String id, String name) {
    this.id = id;
    this.name = name;
}

public String toString() {
    return id + " : " + name;
}

public boolean equals(Object ob) {
    Customer c = (Customer) ob;
    return this.id.equals(c.id);
}
}  
4

2 に答える 2

0

add 関数で、while ループの直後に

x.next = temp;

これは素晴らしいことですが、あなたもする必要があります

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

最後のアイテムまでは、前のアイテムを指します

したがって、リストに追加する各アイテムはリストの最後にあり、次のアイテムがリストに入れられるときにのみ前のアイテムを指します

void add(Customer customer)
{
    Customer temp = customer;

    if (ptr == null)
    {
        ptr = temp;
    }
    else
    {
        Customer x = ptr;
        Customer n = ptr;

        while (x.next != null)
        {
            x = x.next;
            n.next.prev = n;
            n = n.next;
        }

        x.next = temp;
        temp.prev = x;
        ptr.prev = temp;// ******** edited line ******
    }

}
于 2013-08-14T10:26:46.530 に答える