首页 笔记 图片 查字 
所属分类:其它
浏览:42
内容:

要点:
单链表反转 要求空间复杂度O(1),时间复杂度O(n)。
先从头节点遍历到尾节点,
调用递归函数返回新的头节点,
再执行反转操作。

代码:
public class ReverseList {
    public static void main(String[] args) {
        ReNode n1 = new ReNode(1);
        ReNode n2 = new ReNode(2);
        ReNode n3 = new ReNode(3);
        ReNode n4 = new ReNode(4);
        ReNode n5 = new ReNode(5);
        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        n4.next = n5;

        print(n1);

        ReNode newHead = reverse(n1);

        print(newHead);

    }

    static ReNode reverse(ReNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ReNode newHead = reverse(head.next);

        head.next.next = head;
        head.next = null;

        return newHead;
    }

    static void print(ReNode head) {
        ReNode tmp = head;
        System.out.println(tmp.value);
        while (tmp.next != null) {
            tmp = tmp.next;
            System.out.println(tmp.value);
        }
        System.out.println();
        System.out.println();
    }

}

class ReNode {
    int value;
    ReNode next;

    public ReNode(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public ReNode getNext() {
        return next;
    }

    public void setNext(ReNode next) {
        this.next = next;
    }
}