LeetCode206.反转链表

LeetCode206.反转链表

LeetCode206.反转链表_第1张图片

一、双指针法

这道题如果再定义一个新的链表,实现链表元素的反转,其实是对内存空间的浪费

我们只需要改变链表的next指针的指向,直接将链表反转

LeetCode206.反转链表_第2张图片

之前链表头节点是元素1,反转之后头节点是元素5,这里并没有添加或者删除节点,仅仅是改变next指针的方向

接下来看看如何反转

LeetCode206.反转链表_第3张图片

首先定义一个cur指针,指向当前链表的头节点,再定义一个pre指针,初始化为null

然后就要开始反转了,首先要把cur->next节点用tmp指针保存一下,也就是保存一下这个节点

保存这个节点的原因是因为接下来要改变cur->next的指向了,将cur->next指向pre,此时成功反转第一个结点

接下来就是走循环遍历链表,依次修改每个节点的指针指向

最后,cur指针指向null,循环结束,链表反转完毕,然后我们返回pre指针即可

    public ListNode reverseList(ListNode head) {
        //双指针法
        ListNode pre = null;
        ListNode cur = head;
        ListNode temp = null;;
        while(cur!=null){
            //保存cur当前指针的下一个节点,因为我们要改变cur指针的方向
            temp = cur.next;
            cur.next = pre;
            //更新cur和pre指针
            pre = cur;
            cur = temp;
        }
        return pre;
    }

你可能感兴趣的:(算法实战,链表,数据结构,算法,力扣,java,leetcode)