反转单链表 递归法 和 普通方法

public class Test {

    public static void main(String[] args) {
        Node head = new Node(0);
        Node temp = head;
        for (int i = 1; i < 10; i++) {
            temp.setNext(new Node(i));
            temp = temp.next();
        }
        printList(head);
        printList(reverseList1(head));
        printList(reverseList2(head));
    }

    // 普通遍历法
    static Node reverseList1(Node head) {
        Node pointer = head;
        Node nextNode;
        Node prevNode = null;
        while (pointer != null) {
            nextNode = pointer.next();
            pointer.setNext(prevNode);
            prevNode = pointer;
            pointer = nextNode;
        }
        return prevNode;
    }

    // 递归
    static Node reverseList2(Node head) {
        if (head == null || head.next() == null) {
            return head;
        }
        Node newHead = reverseList2(head.next());
        head.next().setNext(head);
        head.setNext(null);
        return newHead;
    }
	
	// 打印链表
    static void printList(Node head) {
        Node temp2 = head;
        while (temp2 != null) {
            System.out.print(temp2.getData() + " ");
            temp2 = temp2.next();
        }
        System.out.println();
    }

}

class Node {
    private int data;
    private Node next;

    Node(int data) {
        this.data = data;
    }

    void setNext(Node next) {
        this.next = next;
    }

    int getData() {
        return data;
    }

    Node next() {
        return next;
    }
}

发布了125 篇原创文章 · 获赞 236 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/103791568
今日推荐