死循环了,怎么办?

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:58:02
package com.link;

public class Node extends ListNode
{
int length = 0;

ListNode firstNode = null;

public int size()
{
return length;
}

/**
* 插入一条数据
* @param code
*/
public void insertNewSecondNode(String code)
{
ListNode list = new ListNode();

list.str = code;

list.link = firstNode.link;

firstNode.link = list;

length++;
}

/**
* 查询一条数据
* @param code
* @return
*/
public ListNode searchList(String code)
{
ListNode list = new ListNode();

list = firstNode;

list.str = code;

while(list.link != null)
{
if(code.equals(list.str))
{
return list;
}
else
{
list = list.link;
}
}
return list;

}

/**

public void insertNode(String code) {
方法中
while (list.link != null) {
list = list.link;
}
list.link = list;
这一句list.link = list;,
list的link指向的是自己,
你以后在按照这个link一直找下去,找到了自己,然后再找自己的Link,又是自己,。。。。。。。
必然出死循环。
这个方法改成下面这样就可以了:
/**
*在链表的最后插入一条数据
*
* @param code
*/
public void insertNode(String code) {
ListNode list = new ListNode();
list.str = code;
if (firstNode == null) {
firstNode = list;
} else {
ListNode loop = firstNode;
while (loop.link != null) {
loop = loop.link;
}
loop.link = list;
}
length++;
}

else
{
list = firstNode;

while(list.link != null)
{
list = list.link;
}
list.link = list;
}

这一段有严重的逻辑问题,自己看看
首先list.link =list; 自己的下一个节点等于自己,肯定会循环引用造成死循环
正确的方法是
else {
ListNode tmp= firstNode;
while(tmp.link