单链表反转之递归法

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

posted @ 2020-02-10 16:30  gaopengpy  阅读(1074)  评论(0编辑  收藏  举报