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