题目入口📌:反转链表
问题描述
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。输入输出实例:
解题分析
本题需要我们翻转单链表,难度在于单链表是单向的,链表中的结点只能往后找,不能前找,如果我们使用双指针的方式的话,很容易搞成死循环。如下图
我们会发现,cur所指向结点中的next更新为head所指向的结点,那cur想要想后移动,就只能移动到head所指向的结点上,就会导致死循环。所以我们要再另设一个指针来指引cur指针向后移动,如下图。
我们在移动cur的时候,还要把head的位置更新。题目最后要返回链表的头结点,head移动不仅可以方便找到cur前一个结点,而且当cur指向null的时候,head所指向的结点就是头结点,一举两得。
代码实现
class Solution { public ListNode reverseList(ListNode head) { if(head == null) return head;//当链表为空时,直接返回 ListNode cur = head.next; head.next = null;//翻转前为头结点,翻转后,就是尾结点,尾结点的next值要置为null while(cur != null ){ ListNode curNext = cur.next;//设置第三个指针,方便cur前进 cur.next = head; head = cur; cur = curNext; } return head; }