[leetcode206]反转链表【归纳/聚焦】

发布于 / 算法 / 0条评论 / Tags: none / 10 次浏览

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

leetCode206链接

示例

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

思路分析

  1. 这类题我的想法是:一定要“聚焦”,就是考虑最少的元素进来,这也是数学归纳法的精髓。这里我们只考虑两个元素,当前元素head和前一个元素prev。我们归纳起来,只要把head.next 指向prev。然后后移head和prev--就可以整个反转链表
  2. 要考虑链表的的断开,我们把head.next指向prev后,head和后一个元素就断开了。那么我们用一个临时变量next记录住下一个元素
    3.最后要考虑结束条件,如果临时指针next是null表示到了结尾,那么head就是新的head。

代码


ListNode reverseList(ListNode head) {
        ListNode newHead = null;
        ListNode prev = null;
        while (head != null){
            //处理断开
           ListNode next = head.next;
           //结尾处理
            if(next == null){
                newHead = head;
            }
            // 聚焦----head 指针指向前一个
           head.next = prev;
            //两个指针后移
            prev = head;
           head = next;


        }
        return newHead;
    }

    评论区(暂无评论)