打印结果:
P1->P2->P3->P4->P5->P6->P7->P8->P9->P10
P10->P9->P8->P7->P6->P5->P4->P3->P2->P1
package com.java.demo.link;
public class LinkList {
/**
* 建立一个链表结构的结构
* @param args i 表示有几代人
*/
private static Person getPerson(int i) {
Person resultPerson = new Person("P" + i);
i--;
while (i > 0) {
Person p = new Person("P" + i);
p.son = resultPerson;
resultPerson = p;
i--;
}
return resultPerson;
}
/**
* 反转链表
* @param p
* @return
*/
private static Person reverse(Person p){
Person resultPerson = p.son;
//取第一个节点
if (!Person.isTail(p)) {
Person temp = p.son;
p.son = null;
resultPerson = p;
p = temp;
}
//取中间第一个节点
while(!Person.isTail(p)){
Person temp = p.son;
p.son = resultPerson;
resultPerson = p;
p = temp;
}
//取最后一个节点
if (Person.isTail(p)) {
p.son = resultPerson;
resultPerson = p;
}
return resultPerson;
}
/**
* 打印p链表
* @param args
*/
private static void showPersons(Person p){
while (!Person.isTail(p)) {
System.out.print(p.name + "->");
p = p.son;
}
if (Person.isTail(p)) {
System.out.println(p.name);
}
}
public static void main(String[] args){
LinkList list = new LinkList();
Person p = getPerson(10);
showPersons(p);
p = reverse(p);
showPersons(p);
}
}
class Person {
public String name;
public Person son;
public Person(String name) {
this.name = name;
}
/*
* 判断是否是最后的一个节点
*/
public static boolean isTail(Person p){
return p.son == null;
}
}