使用节点接收字符的链表
Linked List using nodes to intake characters
所以,我想弄清楚如何为家庭作业执行以下操作:请编写一个程序,要求用户输入一封信。在 linked 列表的末尾插入字母并打印出 linked 列表。请求另一个字母并插入 linked 列表的末尾并打印出列表。继续,直到用户声明他们没有更多的字母可以输入。然后,构建另一个 link 列表,它将要求用户输入一个字母,一次一个,然后按字母顺序将其插入到列表中。每次插入后,打印出列表并继续,直到用户完成输入字母。
这是我目前所拥有的,也是我被困了大约一个星期的地方...
导入 TerminalIO.*;
public class 链表 {
public static void addLine(){
System.out.println("");
}
public static void main(String[] args) {
String answer = "y";
String n = null;
char nodePointer = ' ';
KeyboardReader reader = new KeyboardReader();
Node start = new Node();
Node temp = new Node();
do{
System.out.print("Enter a letter: ");
nodePointer = reader.readChar();
start.letter = nodePointer;
start.nodeptr = new Node(start.letter);
//start.nodeptr.letter = temp.letter;
start = start.nodeptr;
System.out.print("Linked list: ");
temp = start;
while(temp != null){
System.out.print(start.letter);
temp = temp.nodeptr;
}
addLine();
System.out.print("Would you like to enter another letter (y/n)? ");
n = reader.readLine();
addLine();
}while(answer.compareTo(n) == 0);
}
}
构造函数:
public class节点{
char letter;
Node nodeptr;
Node(){
letter = ' ';
nodeptr = null;
}
Node(char x){
letter = x;
nodeptr = null;
}
Node(char x, Node y){
letter = x;
nodeptr = y;
}
}
我得到的输出是:
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:o
您要输入另一个字母 (y/n) 吗? n
无论我输入什么字母,都会发生这种情况,因为我输入的字母与其自身列表中的字母相同...
它应该输出什么(第 1 部分):
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:mo
您要输入另一个字母 (y/n) 吗? y
输入字母:n
链表:mon
您要输入另一个字母 (y/n) 吗? y
输入字母:e
链表:mone
您要输入另一个字母 (y/n) 吗? y
输入字母:y
链表:money
您要输入另一个字母 (y/n) 吗? y
那么对于程序的第二部分,它应该按字母顺序输出,如下所示:
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:mo
您要输入另一个字母 (y/n) 吗? y
输入字母:n
链表:mno
您要输入另一个字母 (y/n) 吗? y
输入字母:e
链表:emno
您要输入另一个字母 (y/n) 吗? y
输入字母:y
链表:emnoy
您要输入另一个字母 (y/n) 吗? y
如果有人能帮助我指出正确的方向或编写代码,那将是有益的,因为老实说,我现在不知道应该如何操纵节点来执行我希望它们执行的操作.
我们缺少您定义 Node.js 的部分代码。但是,即使没有它,我也可以看到你的 start 指针在你的循环中被重置,因为在你的循环中通过这一行输入的每个字母:
start = start.nodeptr;
这不是正确的做事方式。链表头(也就是你的 start 指针)应该只在添加第一个字母时设置一次,然后在随后的循环中永远不会改变。
此外,在此代码段中:
temp = start;
while(temp != null){
System.out.print(start.letter);
temp = temp.nodeptr;
}
您在 temp 上循环,但总是打印出 start.letter.
如果我要调整你的代码,你应该将每个新字母构建到你的 temp 指针中,并且只设置 start = temp 当 start 为 NULL 时。并且您还应该维护一个链表尾部(又名 last 指针),以便将下一个字母快速插入到链表的末尾。
所以我会按如下方式调整您的代码,但由于我没有您的节点定义,因此下面可能存在一些错误。
public static void main(String[] args) {
String answer = "y";
String n = null;
char nodePointer = ' ';
KeyboardReader reader = new KeyboardReader();
Node start = NULL;
Node last = NULL;
Node temp = NULL;
do{
System.out.print("Enter a letter: ");
nodePointer = reader.readChar();
temp = new Node(nodePointer);
temp.nodeptr = NULL;
if (start == NULL) start = temp;
if (last != NULL) last.nodeptr = temp;
last = temp;
System.out.print("Linked list: ");
temp = start;
while(temp != null){
System.out.print(temp.letter);
temp = temp.nodeptr;
}
addLine();
System.out.print("Would you like to enter another letter (y/n)? ");
n = reader.readLine();
addLine();
}while(answer.compareTo(n) == 0);
}
我将留给你来完成你作业的第二部分......当你必须按字母顺序将新字母插入链表的开头、中间或结尾时(而不是部分1 这是将字母添加到列表末尾的简单情况)。一个提示,所有这些都有现有的 Whosebug 答案。就在这周,我已经在链表上回答了 3 或 4 个问题。
所以,我想弄清楚如何为家庭作业执行以下操作:请编写一个程序,要求用户输入一封信。在 linked 列表的末尾插入字母并打印出 linked 列表。请求另一个字母并插入 linked 列表的末尾并打印出列表。继续,直到用户声明他们没有更多的字母可以输入。然后,构建另一个 link 列表,它将要求用户输入一个字母,一次一个,然后按字母顺序将其插入到列表中。每次插入后,打印出列表并继续,直到用户完成输入字母。
这是我目前所拥有的,也是我被困了大约一个星期的地方...
导入 TerminalIO.*;
public class 链表 {
public static void addLine(){
System.out.println("");
}
public static void main(String[] args) {
String answer = "y";
String n = null;
char nodePointer = ' ';
KeyboardReader reader = new KeyboardReader();
Node start = new Node();
Node temp = new Node();
do{
System.out.print("Enter a letter: ");
nodePointer = reader.readChar();
start.letter = nodePointer;
start.nodeptr = new Node(start.letter);
//start.nodeptr.letter = temp.letter;
start = start.nodeptr;
System.out.print("Linked list: ");
temp = start;
while(temp != null){
System.out.print(start.letter);
temp = temp.nodeptr;
}
addLine();
System.out.print("Would you like to enter another letter (y/n)? ");
n = reader.readLine();
addLine();
}while(answer.compareTo(n) == 0);
}
}
构造函数:
public class节点{
char letter;
Node nodeptr;
Node(){
letter = ' ';
nodeptr = null;
}
Node(char x){
letter = x;
nodeptr = null;
}
Node(char x, Node y){
letter = x;
nodeptr = y;
}
}
我得到的输出是:
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:o
您要输入另一个字母 (y/n) 吗? n
无论我输入什么字母,都会发生这种情况,因为我输入的字母与其自身列表中的字母相同...
它应该输出什么(第 1 部分):
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:mo
您要输入另一个字母 (y/n) 吗? y
输入字母:n
链表:mon
您要输入另一个字母 (y/n) 吗? y
输入字母:e
链表:mone
您要输入另一个字母 (y/n) 吗? y
输入字母:y
链表:money
您要输入另一个字母 (y/n) 吗? y
那么对于程序的第二部分,它应该按字母顺序输出,如下所示:
输入字母:m
链表:m
您要输入另一个字母 (y/n) 吗? y
输入字母:o
链表:mo
您要输入另一个字母 (y/n) 吗? y
输入字母:n
链表:mno
您要输入另一个字母 (y/n) 吗? y
输入字母:e
链表:emno
您要输入另一个字母 (y/n) 吗? y
输入字母:y
链表:emnoy
您要输入另一个字母 (y/n) 吗? y
如果有人能帮助我指出正确的方向或编写代码,那将是有益的,因为老实说,我现在不知道应该如何操纵节点来执行我希望它们执行的操作.
我们缺少您定义 Node.js 的部分代码。但是,即使没有它,我也可以看到你的 start 指针在你的循环中被重置,因为在你的循环中通过这一行输入的每个字母:
start = start.nodeptr;
这不是正确的做事方式。链表头(也就是你的 start 指针)应该只在添加第一个字母时设置一次,然后在随后的循环中永远不会改变。
此外,在此代码段中:
temp = start;
while(temp != null){
System.out.print(start.letter);
temp = temp.nodeptr;
}
您在 temp 上循环,但总是打印出 start.letter.
如果我要调整你的代码,你应该将每个新字母构建到你的 temp 指针中,并且只设置 start = temp 当 start 为 NULL 时。并且您还应该维护一个链表尾部(又名 last 指针),以便将下一个字母快速插入到链表的末尾。
所以我会按如下方式调整您的代码,但由于我没有您的节点定义,因此下面可能存在一些错误。
public static void main(String[] args) {
String answer = "y";
String n = null;
char nodePointer = ' ';
KeyboardReader reader = new KeyboardReader();
Node start = NULL;
Node last = NULL;
Node temp = NULL;
do{
System.out.print("Enter a letter: ");
nodePointer = reader.readChar();
temp = new Node(nodePointer);
temp.nodeptr = NULL;
if (start == NULL) start = temp;
if (last != NULL) last.nodeptr = temp;
last = temp;
System.out.print("Linked list: ");
temp = start;
while(temp != null){
System.out.print(temp.letter);
temp = temp.nodeptr;
}
addLine();
System.out.print("Would you like to enter another letter (y/n)? ");
n = reader.readLine();
addLine();
}while(answer.compareTo(n) == 0);
}
我将留给你来完成你作业的第二部分......当你必须按字母顺序将新字母插入链表的开头、中间或结尾时(而不是部分1 这是将字母添加到列表末尾的简单情况)。一个提示,所有这些都有现有的 Whosebug 答案。就在这周,我已经在链表上回答了 3 或 4 个问题。