我正在尝试将字符串转换为链表,其中每个数字都在一个单独的节点中。
我试着调试它,但似乎找不到我的逻辑出了什么问题。我在每个节点中都得到一个奇怪的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;
我认为你走在了正确的轨道上。该方法运行良好,但似乎没有正确地迭代列表。以下是我如何测试你的代码:
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-
charAt
返回指定位置的字符。char
是一种数字类型,但它表示它所代表的字符的ascii地址。
"807".charAt(0)
返回56
,因为这是8
的ascii值。
我怀疑您在ListNode
中有一个int data
字段,它将该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在回答中建议的那样,将ListNode
内的data
字段的类型更改为char
。