单链表反转之递归法
public class LinkedNode { Integer id; LinkedNode next; public LinkedNode(Integer id) { this.id = id; } // 打印链表 public void print(){ System.out.print(this.id); if (this.next != null) { System.out.print("->"); this.next.print(); } else { System.out.println(); } } }
public class TestLinkedNode2 { public static void main(String[] args) { LinkedNode node1 = new LinkedNode(1); LinkedNode node2 = new LinkedNode(2); LinkedNode node3 = new LinkedNode(3); LinkedNode node4 = new LinkedNode(4); LinkedNode node5 = new LinkedNode(5); node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; // 打印链表 System.out.println("链表:"); node1.print(); LinkedNode resNode = reverseList(node1); // 打印之后的链表 System.out.println("反转之后的链表为:"); resNode.print(); } /** * 链表反转,递归实现 */ public static LinkedNode reverseList(LinkedNode node) { // 如果为空链表或者只有一个节点的链表则不需要处理 if (node == null || node.next == null) { return node; } // 递归直到找到尾结点 LinkedNode newHead = reverseList(node.next); // 尾节点反指 node.next.next = node; // 当前节点指向null节点 node.next = null; return newHead; } }
运行结果:
链表:
1->2->3->4->5
反转之后的链表为:
5->4->3->2->1