您的位置:首页 > 编程语言 > Java开发

算法:java 实现单链表的反转

2012-07-04 16:51 453 查看
打印结果:

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐