单链表还原中的错误
bug in single linked list reversion
单链表反转算法中的无限循环。我试着在一张纸上写代码,但仍然找不到错误
public void reverse ()
{
Node pointer = list;
Node newList = new Node();
Node temp = new Node();
Node tempMoving = new Node();
if (pointer != null)
{
newList = pointer;
while (pointer.next != null)
{
System.out.println ("loop");
temp = pointer;
pointer = pointer.next;
temp.next = pointer.next;
tempMoving = pointer;
tempMoving.next = newList;
newList = tempMoving;
}
}
list = newList;
}
我设想这个算法要做的是,当它移动到一个新节点时,它会将该节点放入一个新列表的开头,它会一直重复直到到达结尾。但是,它只打印 "loop" :(
您可以简单地按照以下步骤操作:
public void reverse() {
// Assuming `head` is the first node in linked list
Node current = head, previous = null, forward = null;
while (current.next != null) {
forward = current.next;
current.next = previous;
previous = current;
current = forward;
}
head = current;
head.next = previous;
}
单链表反转算法中的无限循环。我试着在一张纸上写代码,但仍然找不到错误
public void reverse ()
{
Node pointer = list;
Node newList = new Node();
Node temp = new Node();
Node tempMoving = new Node();
if (pointer != null)
{
newList = pointer;
while (pointer.next != null)
{
System.out.println ("loop");
temp = pointer;
pointer = pointer.next;
temp.next = pointer.next;
tempMoving = pointer;
tempMoving.next = newList;
newList = tempMoving;
}
}
list = newList;
}
我设想这个算法要做的是,当它移动到一个新节点时,它会将该节点放入一个新列表的开头,它会一直重复直到到达结尾。但是,它只打印 "loop" :(
您可以简单地按照以下步骤操作:
public void reverse() {
// Assuming `head` is the first node in linked list
Node current = head, previous = null, forward = null;
while (current.next != null) {
forward = current.next;
current.next = previous;
previous = current;
current = forward;
}
head = current;
head.next = previous;
}