【Java数据结构】Java数据结构之链表反转

时间:2022-02-07 08:50:32

我们都知道用C可以很简单的实现单链表反转,今天来学习下,在Java中如何实现链表反转。

思路很简单,定义一个类,这个类分成2块,一块是表示自身的标志,另外一个存储指向下一个元素的引用。通过互换相邻两个节点的引用来达到链表反转的效果。上代码:

package com.withiter.test;

public class ReverseList {

	/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node nodeLink = add("1", null);
add("2", nodeLink);
add("3", nodeLink);
add("4", nodeLink);
add("5", nodeLink);
print(nodeLink);
nodeLink = reverse(nodeLink);
print(nodeLink);
} public static Node add(String name, Node head) {
if (head == null) {
return new Node(name);
} else {
Node p = head;
while (p.next != null) {
p = p.next;
}
p.next = new Node(name);
return head;
}
} // 反转的核心方法
public static Node reverse(Node head){
if(head == null){
return null;
}
Node p = head;
Node q = head.next;
p.next = null;
while(q != null){
Node temp = q.next;
q.next = p;
p = q;
q = temp;
} return p;
} public static void print(Node head) {
if (head == null) {
System.out.println("null");
} else {
Node p = head;
while (p != null) {
System.out.print(p.name + "\t");
p = p.next;
}
System.out.print("\n");
}
}
} class Node { public Node(String name) {
super();
this.name = name;
} public String name; // 自身标志
public Node next; // 指向下一个节点的引用
}

运行打印结果:

1    2    3    4    5    
5    4    3    2    1