反转链表

2021-09-23  本文已影响0人  帕博雷克斯丢丢

描述

输入一个长度为n链表,反转链表后,输出新链表的表头。
数据范围 n <= 1000
要求:空间复杂度 O(1)O(n)

示例1

输入:{1,2,3}
返回值:{3,2,1}

示例2

输入:{}
返回值:{}
说明:空链表则输出空

Java 真正的递归

package com.practices.practice001.a003;

public class Main {
    public static void main(String[] args) {
        ListNode li =
                new ListNode(1,
                        new ListNode(2,
                                new ListNode(3,
                                        new ListNode(4,
                                                new ListNode(5,
                                                        new ListNode(6)
                                                )
                                        )
                                )
                        )
                );

        System.out.println(li);

        Solution solution = new Solution();

        ListNode rs = solution.ReverseList(li);

        System.out.println(rs);
    }
}

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

    @Override
    public String toString() {
        return val + " " + (next == null ? "" : next);
    }
}


class Solution {

    private int count = 0;

    public ListNode ReverseList(ListNode head) {
        return head == null ? null : reverse(head, head.next);
    }

    private ListNode reverse(ListNode prev, ListNode curr) {
        if (prev == null) return null;
        if (count == 0) prev.next = null;
        count++;
        if (curr != null) {
            ListNode realNext = curr.next;
            curr.next = prev;
            return reverse(curr, realNext);
        } else {
            return prev;
        }
    }
}

Java 精简后的代码

package com.practices.practice001.a003;

public class Main {
    public static void main(String[] args) {
        ListNode li =
                new ListNode(1,
                        new ListNode(2,
                                new ListNode(3,
                                        new ListNode(4,
                                                new ListNode(5,
                                                        new ListNode(6)
                                                )
                                        )
                                )
                        )
                );

        System.out.println(li);

        Solution solution = new Solution();

        ListNode rs = solution.ReverseList(li);

        System.out.println(rs);
    }
}

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

    @Override
    public String toString() {
        return val + " " + (next == null ? "" : next);
    }
}


class Solution {

    public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode res = ReverseList(head.next);
        head.next.next = head;
        head.next = null;
        return res;
    }

}
上一篇下一篇

猜你喜欢

热点阅读