这是一道很经典的数据结构的题目:反转链表
快来和我一起攻克吧!
反转链表 : 顾名思义:
就是把一个链表反转过来,如图:
给定单链表的头节点 head
,请反转链表,并返回反转后的链表的头节点。
解题思路:
第一步:判断是否为空
先去判断是否为空链表~
不然我们去反转半天,结果是一个空的链表…
那这个结果就很尴尬…
若头结点为空就直接返回空
if(head == null){
return null;
}
第二步:判断是否只有一个节点
- 若只有一个节点,那我们就直接返回这个节点即可
- 一般只有一个节点都是头节点
- 满足条件: head.next == null
if(head.next == null){
return head;
}
第三步:翻转的核心思路
使用头插法来翻转, 让head的下一个节点的next指向head即可完成翻转,但是会造成余下的节点游离…
所以我们需要去定义一个curNext节点指向剩余的节点
如图所示
没有翻转前的链表:
翻转之后的链表:
我们看图中的解释:
所以我们需要定义一个curNext指向cur.next,直到整个链表遍历结束为止
ListNode cur = head.next;
//头结点会变成尾结点,所以需要置为空
head.next = null;
while(cur != null){
ListNode curNext = cur.next;
cur.next = head;
head = cur;
cur = curNext;
}
//最后返回翻转好的链表头结点
return head;
完整代码如下:
public ListNode resever(ListNode head){
if(head == null){
return null;
}
if(head.next == null){
return head;
}
ListNode cur = head.next;
head.next = null;
while(cur != null){
ListNode curNext = cur.next;
cur.next = head;
head = cur;
cur = curNext;
}
return head;
}
对应的是力扣网上的LCR 024反转链表:
点击即可跳转: 反转链表
快去检验一下自己的学习成果吧~~
下次见~~