代码如下,先输入一些数初始化一个链表,然后将其逆转.但是不知道为什么进入Reversion()方法后,就死循环了.好像是在最后两个结点之间死循环!求解决!importjava.util.Scanner;publicclas...
代码如下,先输入一些数初始化一个链表,然后将其逆转.但是不知道为什么进入Reversion()方法后,就死循环了.好像是在最后两个结点之间死循环!
求解决!
import java.util.Scanner;
public class Homework5 {
public static void main(String[] args){
LinkedList ll = new LinkedList(); //生成一个双向链表
System.out.println("请输入要插入的值,输入0结束"); //初始化链表
Scanner s = new Scanner(System.in);
while(true){
int value = s.nextInt();
if(value==0) break;
ll.Insert(new LinkedNode(value));
}
System.out.println("逆转前");
ll.DisplayLinkedList(ll); //在逆转前,把链表的值输出一次
ll = ll.Reversion(ll); //逆转链表
System.out.println("逆转后");
ll.DisplayLinkedList(ll); //逆转后,把链表的值输出一次
}
}
//定义结点类
class LinkedNode{
int value; //结点存放的值
public LinkedNode(int value) { //给结点值赋值的构造器
this.value = value;
}
LinkedNode previous = null; //指向前一个结点
LinkedNode next = null; //指向下一个结点
}
//定义双向链表类
class LinkedList {
public LinkedNode Head = null; //双向链表的表头结点
public LinkedNode Last = null; //双向链表的最后一个结点
//向链表插入结点的方法
void Insert(LinkedNode ln){
if(Head==null){ //如果头结点为空,那么附值给头结点
Head = ln;
Last = Head; //Last(最后一个结点)指向Head,因为此时只有一个结点,所以即是头结点,也是最后一个结点
} else {
Last.next = ln; //将要插入的结点附给Last.next
Last.next.previous = Last; //新插入的结点的前一结点指向Last
Last = Last.next; //更新Last为最后一个
}
}
//逆转链表的方法
LinkedList Reversion(LinkedList ll){
LinkedList re = new LinkedList(); //新实例一个双向链表
while(ll.Last!=null){ //将传入的链表从最后一个结点开始,依次插入到新链表中,直到ll.Last为空(即头结点的前指针)
System.out.println(ll.Last.value);
re.Insert(ll.Last);
ll.Last = ll.Last.previous;
}
return re;
}
//把链表的值输出一次
void DisplayLinkedList(LinkedList ll){
LinkedNode Temp = ll.Head;
while(Temp!=null){
System.out.println(Temp.value);
Temp = Temp.next;
}
}
}
展开