不多说直接看代码吧:
package com.testnode;
//首先创建一个链表节点对象
class Node {
private Node next;
private int value;
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
/**
* 翻转单链表测试类
*/
public class RevertNodeTest {
//按顺序打印链表的值
public static void printNode(Node head) {
Node current = head;
while (current != null) {
System.out.println(current.getValue());
current = current.getNext();
}
}
//递归方式翻转单链表
public static Node diguiRevertNode(Node node, Node next){
if (next!=null){
Node last = diguiRevertNode(node.getNext(), next.getNext());
next.setNext(node);
return last;
}else{
return node;
}
}
public static void main(String[] args) {
//创建一个链表
Node node4 = new Node();
node4.setValue(4);
Node node3 = new Node();
node3.setValue(3);
node3.setNext(node4);
Node node2 = new Node();
node2.setValue(2);
node2.setNext(node3);
Node node1 = new Node();
node1.setValue(1);
node1.setNext(node2);
printNode(node1);//打印原始链表
Node node = diguiRevertNode(node1, node1.getNext());
node1.setNext(null);//翻转完后将原始头结点的指针区域置为null
System.out.println("------------------");
printNode(node);//打印翻转后链表
}
}
遍历方式翻转单链表参照上一篇: