單鏈表反轉之遞歸法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM