我是java的初学者,由于其复杂性,我无法理解Java中的链表。所以我的代码非常简单。
Node node, head, tail;
head = null; // initializes the head of the linked list to null
int counter = 0;
String inputdata; // input
do
{
System.out.print ("What name would you like stored? (\"quit\" to end) ");
inputdata = stdin.readLine ();
if (!inputdata.equals ("quit"))
{
node = new Node (inputdata);
node.next = head;
// update the head to point to the new front of the list
head = node;
count++;
}
}
while (!inputdata.equals ("quit")); // loop continues until "quit" selected
System.out.println ();
node = head;
///////////////////////////////
String delete;
boolean found;
System.out.println ("What node to delete?");
delete = stdin.readLine ();
do
{
for (int i = 0 ; i <= count ; i++)
{
if (delete.equals (node.data))
{
found = true;
System.out.println ("It is found!");
}
}
}
while (found = false);
这是班级
public class Node
{
Node next;
String data;
public Node (String data)
{
this.data = data;
}
}
我理解算法是如何工作的。搜索节点,当发现节点时,它将之前的节点指向搜索的节点之后的节点。
每当我搜索节点时,我会得到java.lang.nullpointer异常,这些异常基本上转化为我的代码很糟糕。
我需要帮助,因为每当我搜索如何做到这一点时,我总是问自己“为什么要把这个”或“什么是LS”或“为什么有多种方法,其中的变量是什么数字”。
请告诉我我做错了什么以及我需要做什么。
答案 0 :(得分:0)
node = new Node (inputdata);
node.next = head;
// update the head to point to the new front of the list
head = node;
count++;
首先你创建一个节点,然后你说这个节点的下一个是头... 然后你去说这个头是这个节点...所以你基本上是在做头== node == node.next
那就是不行:D
我建议:
//Init head and tail...
if(head==null){
head = new Node("Head"); //use whatever data you want/need
tail= new Node("Tail");
tail.next=head;
head.next = tail;
}
//add a new node...
newnode = new Node("Some data");
//since this is a one-way linked list, i suggest you walk from the head
//and go until you meet the tail
currNode = head;
while( currNode.next.data.compareTo("Tail") != 0 )
{
currNode = currNode.next;
}
//now add the new node here...
newnode.next = currNode.next;
currNode.next = newNode;
这样你总是把它添加到列表的“结尾”...... 如果你想在开头添加它,那么就在头部使用之后:
newNode = new Node("Some data");
newNode.next = head.next;
head.next = newNode;
建议您有一个“限制器”,如尾巴,以便知道您何时在列表末尾...
所以现在你的删除工作正常,但我建议你做更多的事情:
currentNode = head;
do
{
if(currentNode.next.data.compareTo(delete)==0){ //if the next one is the one i'm looking for, remove it and let the garbage collector take care of it
currentNode.next = currentNode.next.next;
break; //leave the loop
else
currentNode = currentNode.next;
}
while (currentNode.next.data.compareTo("Tail") != 0);
使用这个while循环,你将遍历你的列表直到结束/尾部,如果没有找到则停止... 在你的例子中,它会在列表中四处走动,因为找不到搜索到的节点