描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0≤ n ≤1000
要求:空间复杂度O(1) ,时间复杂度O(n) 。
如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
示例1:
输入:{1,2,3}
输出:{3,2,1}
示例2:
输入:{ }
输出:{ }
说明:空链表则输出空
解题:
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param head ListNode类
* @return ListNode类
*/
public ListNode ReverseList (ListNode head) {
// head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null
if(head == null){
return null;
}
ListNode pre = null;// 当前节点的前一节点
ListNode next = null;// 当前节点的后一节点
while(head != null){
next = head.next;// 用next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂
head.next = pre;// 让head从指向next变成指向pre
pre = head;// 更新pre,向后移动一个节点
head = next;// 更新当前节点head,先后移动一个节点
}
// 如果head为null的时候,pre就为最后一个节点了,但是链表已经反转完毕,pre就是反转后链表的第一个节点
// 直接输出pre就是我们想要得到的反转后的链表
return pre;
}
}