我有这段代码。它在语法上是正确的,但当我试图从前面删除一个节点时,它表示"该列表为空"。
我认为我的错误在于isEmpty
方法,因为它返回了错误的值,但我不知道为什么。
这是我的代码:
public class link {
public String bookName ;
public int millionSold;
public link next ;
public static void main(String [] args)
{
linkList linkedlist = new linkList();
linkedlist.insertLink("Head first java", 200);
linkedlist.insertLink("Head first design pattern", 400);
linkedlist.insertLink("Head first design", 600);
linkedlist.display();
System.out.println(linkedlist.isEmpty());
linkedlist.findItem("Abed");
}
public void display()
{
System.out.println(bookName +":"+millionSold+"000.000");
}
public link(String bookName,int millionSold)
{
this.bookName=bookName;
this.millionSold=millionSold;
}
public String toString()
{
return bookName ;
}
}
链表
class linkList
{
public link firstLink ;
linkList()
{
firstLink = null ;
}
public boolean isEmpty()
{
boolean empty ;
if(firstLink==null)
{
empty = true ;
}
else
{
empty = false ;
}
return empty;
}
public void insertLink(String bookName , int millionSold)
{
link newLink = new link(bookName,millionSold);
newLink.next = firstLink;
firstLink=newLink ;
}
public link removeLink()
{
link linkReference = firstLink ;
if(!isEmpty())
linkReference.next= firstLink;
else
System.out.println("The List is Empty");
return linkReference ;
}
public void display()
{
while(firstLink!=null)
{
firstLink.display();
System.out.println("The Next :"+firstLink.next);
firstLink = firstLink.next;
System.out.println();
}
}
public link findItem(String bookName)
{
if(!isEmpty())
{
while(firstLink.bookName != bookName)
{
if(firstLink.next == null)
{
return null ;
}
else
{
firstLink=firstLink.next;
}
}
}
else
{
System.out.println("Can not find a match");
}
return firstLink ;
}
}
答案 0 :(得分:0)
在$ cat test
03:44:04.373 [127.0.0.1-8009-exec-178]
INFO c.c.c.x.x.w.f.AuthenticationFilter - cachObj
{"guid":"guid","userId":"aUserId","isPrimary":false,"accessToken":"accessToken"}
$ awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' test
aUserId
作业removeLink
分配linkReference.next= firstLink;
到firstLink
,其中你想要反过来。您希望linkReference.next
为firstLink
,因此请尝试更改linkReference.next
另一个观察是firstLink=linkReference.next;
和display
在您运行方法时更改指向列表的指针(唯一的入口点)时不使用findItem
。
答案 1 :(得分:0)
使用临时变量(下面为cursor
)来浏览列表。否则,你将first定义为firstLink,看起来list是空的。
public void display()
{
link cursor = firstLink;
while(cursor!=null)
{
cursor.display();
System.out.println("The Next :"+cursor.next);
cursor = cursor.next;
System.out.println();
}
}
并且想要循环遍历列表(例如findItem()
)也是更好的方法。
答案 2 :(得分:0)
问题出在你的display()方法中。您遍历列表,然后 firstLink 变量变为空。您需要在display()方法中为迭代添加一个临时变量,如:
link tempLink = firstLink;
while (tempLink != null) {
tempLink.display();
System.out.println("The Next: " + firstLink.next);
tempLink = tempLink.next;
System.out.println();
}
在迭代列表但不想改变头部的其他地方使用相同的技术(例如findItem()方法)。
我还建议使用Java中所有类的大写名称。您可以阅读有关Java命名Conventios here的更多信息。