LeetCode206.反转链表

一、双指针法
这道题如果再定义一个新的链表,实现链表元素的反转,其实是对内存空间的浪费
我们只需要改变链表的next指针的指向,直接将链表反转

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

首先定义一个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;
    }



















