String ke daftar tertaut tunggal

Saya mencoba mengonversi string menjadi daftar tertaut di mana setiap digit berada dalam simpul terpisah.

Saya mulai mencoba men-debugnya tetapi sepertinya saya tidak dapat menemukan apa yang salah dengan logika saya. Saya terus mendapatkan angka 2 digit yang aneh di setiap node dan belum tentu angka yang muncul di string.

Harap perhatikan ListNode adalah kelas tempat saya membuat objek simpul baru.

String number = "807";
   
int size = number.length();
int pos = 0;
ListNode dummyhead = new ListNode();
ListNode curr = dummyhead;
while (size > 0){
    curr.next = new ListNode(number.charAt(pos));   
    pos++;
    size--;
    curr = curr.next;
}

return dummyhead.next;

person Michal Moryosef    schedule 13.08.2020    source sumber


Jawaban (2)


Saya pikir Anda berada di jalur yang benar. Metode ini berfungsi dengan baik, tetapi tampaknya Anda tidak mengulangi daftarnya dengan benar. Inilah cara saya menguji kode Anda:

public class ListNode{
    ListNode next;
    char data;
    public ListNode(char data) {
        this.data = data;
    }
    public ListNode() {}
}
private static ListNode getList(String number){
    int size = number.length();
    int pos = 0;
    ListNode dummyhead = new ListNode();
    ListNode curr = dummyhead;
    while (size > 0){
        curr.next = new ListNode(number.charAt(pos));   
        pos++;
        size--;
        curr = curr.next;
   }
   return dummyhead.next;
}
private static String printList(ListNode head) {
    ListNode n = head;
    StringBuilder sb = new StringBuilder();
    while(n != null) {
        sb.append(n.data+"-");
        n = n.next;
    }
    return sb.toString();
}
public static void main(String[] args) {
    String number = "807";
    System.out.println(printList(getList(number)));
}

Keluaran:

8-0-7-
person Majed Badawi    schedule 13.08.2020

charAt mengembalikan karakter dari posisi yang ditentukan. char adalah tipe numerik, tetapi mewakili alamat ascii dari karakter yang diwakilinya.

"807".charAt(0)

mengembalikan 56 karena itu adalah nilai ascii dari 8.

Saya menduga Anda memiliki bidang int data di dalam ListNode, yang menyimpan char tersebut menjadi int biasa.

807 Anda kemudian akan diubah menjadi daftar angka 56, 48, 55.

Anda rupanya ingin menyimpan "8" itu ke dalam node, jadi gunakanlah

while (size > 0){
  //for pos=0, this converts the string "8" to the integer 8:
  Integer n = Integer.valueOf(number.substring(pos, pos+1));
  curr.next = new ListNode(n);

Atau, seperti yang disarankan Majed dalam jawabannya, ubah jenis bidang data Anda di dalam ListNode menjadi char.

person f1sh    schedule 13.08.2020