java链表的反转,以及反转后的输出

  • 链表类中的反转操作
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);//反转后的输出
	}
}

测试结果

猜你喜欢

转载自blog.csdn.net/qq_44182424/article/details/89111519