OceanSide On my own FEET
Fork me on GitHub

LeetCode 206 反转链表

反转一个单链表


public class ReverseList1 {

    /**
     * 两种方法:
     *  迭代反转
     *  递归反转
     * @param head
     * @return
     */
    public ListNode reverseList(ListNode head) {
        // 迭代反转太简单,就不写了
        // 重点是递归反转,代码很简单,理解起来挺麻烦的
        /**
         * 这里递归的过程,结束条件是head.next == null,即当只剩下一个节点时,
         * 我们不需要再往下递归了。
         * 当然,还有结束条件是:如果一开始head就是null,那么我们当然也不需要进
         * 行递归了,直接返回就行。
         * 只剩一个节点时,将它的next置为null,就算完成了反转
         * 接下来回到上一层,这一层的head.next就是刚刚那层的head,所以在这一层
         * 我们只需要将head.next.next置为head,就算完成了反转。因为它后面的节
         * 点都反转完成了。接下来再将head的next置为null即可。
         */
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }

}


class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
posted @ 2021-04-04 18:22  EEthunder  阅读(24)  评论(0)    收藏  举报