算法打卡Day11_leetcode _206 反转链表

当你攥紧拳头的时候,你手里可能是空空如也,除了手汗,什么也拿不到;但是当你摊开双手的时候,清风可以涌入你的怀中,阳光可以聚拢在你的手心,你拥有的,将是整个世界的美好与诗意。
算法打卡Day11_leetcode _206 反转链表_第1张图片

Leetcode原题

206.反转链表

算法打卡Day11_leetcode _206 反转链表_第2张图片

思路

这题听说还是字节、微软、美团阿里巴巴的热度题目。这题要求链表反转,也就是本来是前面指向后面的,现在要求后面的倒着指向前面.嗯,你是不是也想想会了,敲起了就不知道如何下手,没关系,我也是~~

迭代法

假设链表为 1—>2—>3.现在我们要改为3—>2—>1
在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
具体代码如下:

  public ListNode reverseList(ListNode head) {
        ListNode pre =null;
        ListNode curr= head;
        while(curr!=null){
            ListNode next= curr.next; //保留下一节点
            curr.next =pre; //当前节点指向前一个节点
            pre =curr; //前节点处理后,指针移动到当前节点
            curr = next;// 当前节点往后移动
        }
        return pre;
    }

算法打卡Day11_leetcode _206 反转链表_第3张图片
另外一种递归的方法,我觉得比较复杂,不适合现在去了解。有兴趣的可以去看一下官网。提示

有兴趣的老爷,还可以关注我的公众号【一起收破烂】,回复【006】获取 最新java面试资料以及简历模型120套哦~
在这里插入图片描述

你可能感兴趣的:(算法每日进步,链表,反转链表,数据结构)