题目
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0≤n≤1000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
解法
双链表循环求解
先创建一个新的空链表,依次截取反转链表
public ListNode ReverseList (ListNode head) {
//先创建一个空链表,每次反转都写在这个链表后面
ListNode newHead = null;
//循环
while(head != null){
//先创建一个链表保存不参与循环的节点部分,当做循环部分的依据
ListNode temp = head.next;
//将新链表替代需循环外的节点
head.next = newHead;
//此时head是依次反转的
newHead = head;
//将之间存储的节点重新赋值给head继续下一轮循环,直到head为空
head = temp;
}
retern newHead;
}