首页 > 其他 > 详细

LeetCode 206 反转链表

时间:2021-04-04 22:36:27      阅读:15      评论:0      收藏:0      [点我收藏+]

反转一个单链表


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; }
}

LeetCode 206 反转链表

原文:https://www.cnblogs.com/easternE/p/14616692.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!