สตริงไปยังรายการที่เชื่อมโยงเพียงรายการเดียว

ฉันกำลังพยายามแปลงสตริงเป็นรายการที่เชื่อมโยงโดยแต่ละหลักอยู่ในโหนดแยกกัน

ฉันพยายามแก้ไขจุดบกพร่อง แต่ดูเหมือนจะไม่พบสิ่งผิดปกติในตรรกะของฉัน ฉันได้รับตัวเลข 2 หลักแปลกๆ อยู่เสมอในแต่ละโหนด และไม่จำเป็นต้องเป็นตัวเลขที่ปรากฏในสตริงด้วยซ้ำ

โปรดทราบว่า ListNode เป็นคลาสที่ฉันสร้างวัตถุโหนดใหม่ด้วย

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 แหล่งที่มา


คำตอบ (2)


ฉันคิดว่าคุณมาถูกทางแล้ว วิธีการนี้ใช้งานได้ดี แต่ดูเหมือนว่าคุณจะทำซ้ำรายการไม่ถูกต้อง นี่คือวิธีที่ฉันทดสอบรหัสของคุณ:

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)));
}

เอาท์พุท:

8-0-7-
person Majed Badawi    schedule 13.08.2020

charAt ส่งคืนอักขระของตำแหน่งที่ระบุ A char เป็นประเภทตัวเลข แต่แสดงถึงที่อยู่ ASCII ของอักขระที่เป็นตัวแทน

"807".charAt(0)

ส่งกลับ 56 เพราะนั่นคือค่า ASCII ของ 8

ฉันสงสัยว่าคุณมีฟิลด์ int data อยู่ภายใน ListNode ซึ่งจะบันทึก char นั้นลงใน int ปกติ

ดังนั้น 807 ของคุณจะถูกแปลงเป็นรายการหมายเลข 56, 48, 55

เห็นได้ชัดว่าคุณต้องการบันทึก "8" นั้นลงในโหนด ดังนั้นให้ใช้

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);

หรือตามที่ Majed แนะนำในคำตอบของเขา ให้เปลี่ยนประเภทฟิลด์ data ของคุณภายใน ListNode เป็น char

person f1sh    schedule 13.08.2020