public Person reverseList(){//反转链表
if(this.root==null||this.root.next==null){//判断根节点是否为空或者链表只含一个有根节点
return this.root;
}
Person pPerson=null;//声明前驱节点
Person aPerson=this.root;//声明当前节点
Person nPerson=null;//声明后继节点
while(aPerson!=null){//当前节点不为空时执行
nPerson=aPerson.next;//当前节点的下一个节点用后继节点来表示
aPerson.setNext(pPerson);//设置前一个节点为当前节点的后继
pPerson=aPerson;//前一个节点换到当前节点的位置,等待下一轮的操作
aPerson=nPerson;//当前节点换到当前节点的下一个位置,等待下一轮操作
}
return pPerson;//返回前驱节点
}
链表类中的输出操作
public void printL(Person person){
System.out.println("当前链表包含如下信息:");
if(person!=null){//将传入对象的位置视作表头
person.print();
}
}
节点类中的print()方法,对于链表类中输出操作的支持
public void print(){//节点类输出
System.out.println("姓名:"+this.getName()+"\t性别:"+this.getGender()+"\t\t年龄:"+this.getAge());
if(this.next!=null){//若后继不为空就递归调用
this.next.print();
}
}
测试
public class NewList {///主加载类测试
public static void main(String args[]){
Person p1=new Person("李一","女",25);
Person p2=new Person("李二","男",60);
Person p3=new Person("李三","男",15);
Person p4=new Person("李四","女",19);
Person p5=new Person("李五","男",26);
Person p6=new Person("李五","男",26);
Person p7=new Person("李六","男",28);
Link l=new Link();
l.addPerson(p1);
l.addPerson(p2);
l.addPerson(p3);
l.addPerson(p4);
l.addPerson(p5);
l.addPerson(p6);
l.printLink();//输出原来链表
Person p=l.reverseList();//反转链表
l.printL(p);//反转后的输出
}
}