算法: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;
}
}
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;
}
}
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
- 【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】
- 用Java实现单链表的反转
- 【LeetCode-面试算法经典-Java实现】【190-Reverse Bits(反转二制)】
- 链表反转算法-java实现
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 【数据结构和算法】用java简单的实现单链表的基本操作
- 【Java】实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
- 数据结构与算法|Java实现单链表
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- 【LeetCode-面试算法经典-Java实现】【226-Invert Binary Tree(反转二叉树)】
- 反转单链表(java实现)
- Java字符串反转算法实现
- 【转】JAVA实现两种方法反转单链表
- 单链表反转的递归实现(Reversing a Linked List in Java, recursively)
- [算法]实现单链表的反转
- 【LeetCode-面试算法经典-Java实现】【151-Reverse Words in a String(反转字符串中的单词)】
- 单链表反转的递归实现(Reversing a Linked List in Java, recursively)
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】