目录
一.题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
二.输入输出事例
三.解题思路
原地移动链表,
将head.next置空,定义一个cur为head的下一个节点,让cur.next = head;但是这让会导致cur后面的节点丢失,所以定义一个curNext来暂存下一个要处理的节点。
让head= cur,cur= curNext,再次循环上面一步,当cur为空时,直接退出循环,链表翻转完成。
反转前 (12->23->34->45->56)
反转后(56->45->34->23->12)
四.代码演示
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return null;
}//如果节点为空直接返回null
if(head.next == null){
return head;
}//如果只有一个节点无需反转,返回头结点即可
ListNode cur = head;
head = null;
while(cur!=null){
ListNode curNext = cur.next;//让curNext来暂存当前处理节点的引用
cur.next = head;//让当前节点的next指向上一个节点
head = cur;//head更新到下一个节点
cur = curNext;//cur更新到下一个节点
}
return head;
}
}
以上是我对该代码的一些思路,若有不正确的地方,欢迎大家留言斧正