Java反转LinkedList——调试器甚至无法工作

Java反转LinkedList——调试器甚至无法工作,java,intellij-idea,Java,Intellij Idea,所以基本上我创建了自己的linkedlist类,现在我添加了一个名为reverse的函数来反转它。奇怪的是,它不工作,我甚至无法调试!我不知道发生了什么,如果有人可以拉我的代码,让我知道发生了什么,那将是惊人的。我在一个文件中同时拥有Node类和LinkedList类,反向函数称为reverse。如果您现在尝试使用reverse,它将不起作用,冻结调试器,甚至不允许我在第一次迭代后单步执行while循环。(我正在使用IntelliJ) 类节点{ 私有类型数据; 私有节点nextNode; 公共节

所以基本上我创建了自己的
linkedlist
类,现在我添加了一个名为
reverse
的函数来反转它。奇怪的是,它不工作,我甚至无法调试!我不知道发生了什么,如果有人可以拉我的代码,让我知道发生了什么,那将是惊人的。我在一个文件中同时拥有Node类和
LinkedList
类,反向函数称为reverse。如果您现在尝试使用reverse,它将不起作用,冻结调试器,甚至不允许我在第一次迭代后单步执行while循环。(我正在使用
IntelliJ

类节点{
私有类型数据;
私有节点nextNode;
公共节点(类型数据){
这个数据=数据;
}
公共void setData(类型数据){
这个数据=数据;
}
公共类型getData(){
返回数据;
}
public void setNextNode(节点nextNode){
this.nextNode=nextNode;
}
公共节点getNextNode(){
返回下一个节点;
}
@凌驾
公共字符串toString(){
return“Data:+this.Data;
}
}
公共类链接列表{
专用节点头;
私有整数长度;
公共链接列表(){
长度=0;
}
//返回:指向列表中Node.getData()等于(data)的第一个节点的指针
//O(N)
公共节点查找(类型数据){
节点当前节点=头;
while(currentNode!=null){
if(currentNode.getData().equals(data)){
返回当前节点;
}
currentNode=currentNode.getNextNode();
}
返回null;
}
//返回:列表的长度
//O(1)
公共整数getLength(){
返回长度;
}
//创建一个包含数据的节点,并将其添加到列表的前面
//O(1)
公共void addaHead(类型数据){
节点newHead=新节点(数据);
newHead.setNextNode(this.head);
this.head=newHead;
长度+=1;
}
//删除头节点(垃圾收集)
//O(1)
公营机构{
如果(this.head!=null){
this.head=this.head.getNextNode();
长度-=1;
}
}
公共无效反向(){
Node rememberMe=head.getNextNode();
while(记住!=null){
节点温度=头;
头=记忆;
rememberMe=head.getNextNode();
头部设置下一个节点(温度);
}
}
//使用node.toString打印出节点
//例如{node1.toString(),node2.toString(),node3.toString()}
//O(N)
@凌驾
公共字符串toString(){
字符串结果=“{”;
节点currentNode=this.head;
while(currentNode!=null){
结果+=“”+currentNode.toString()+“”;
currentNode=currentNode.getNextNode();
if(currentNode!=null){
结果+=“,”;
}
}
结果+=“}”;
返回结果;
}
}

反转后,原始头部仍有一个指向第二个元素的下一个元素,但现在是倒数第二个元素,因此反转后,末端有一个循环。这意味着toString()函数中有一个无限循环,intellij调试器可能正在调用该循环

要修复,请跟踪原始头部并将其“下一个”设置为null

public void reverse() {
    Node<Type> orig_head = head;
    Node<Type> rememberMe = head.getNextNode();

    while(rememberMe != null) {
        Node<Type> temp = head;
        head = rememberMe;
        rememberMe = head.getNextNode();
        head.setNextNode(temp);
    }
    orig_head.setNextNode(null);
}
public void reverse(){
节点原点=头部;
Node rememberMe=head.getNextNode();
while(记住!=null){
节点温度=头;
头=记忆;
rememberMe=head.getNextNode();
头部设置下一个节点(温度);
}
原始头setNextNode(空);
}

反转后,原始头部仍有一个指向第二个元素的下一个元素,但现在是倒数第二个元素,因此反转后,末端有一个循环。这意味着toString()函数中有一个无限循环,intellij调试器可能正在调用该循环

要修复,请跟踪原始头部并将其“下一个”设置为null

public void reverse() {
    Node<Type> orig_head = head;
    Node<Type> rememberMe = head.getNextNode();

    while(rememberMe != null) {
        Node<Type> temp = head;
        head = rememberMe;
        rememberMe = head.getNextNode();
        head.setNextNode(temp);
    }
    orig_head.setNextNode(null);
}
public void reverse(){
节点原点=头部;
Node rememberMe=head.getNextNode();
while(记住!=null){
节点温度=头;
头=记忆;
rememberMe=head.getNextNode();
头部设置下一个节点(温度);
}
原始头setNextNode(空);
}

在while循环中设置一个断点,您应该可以看到原因。尝试了它,但不起作用,在第一次迭代后,它就结束了@如果在while循环中设置一个断点,您应该会看到原因。尝试了它,但不起作用,在第一次迭代后,它将全部结束@肯特