题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
反转链表之后,原本处于第一位的元素变成了最后一位,第一位的指针也将会指空,即null。
1,2*--->2,3*--->3,null 反转后 1,null<---2,1*<---3,2*
反转其中的原理,我理解的就是:数据不变,指针反向,原来的表尾也就成了表头!
所以3的指针指向2,2的指针指向1,1的指针指空
1,2*--->2,3*--->3,null
1,null<---2,1*<---3,2*
我的解决思路是:
初始化三个指针变量:
ListNode preHead = null;// 前表头
ListNode pHead = head;// 当前数据
ListNode reHead = null;// 新表头
//使用reHead来进行相近两个数的指针交换,但是1的指针要指向空,而2的指针是指向3 的,不能将2的指针先赋予reHead再交予1,所以我们将reHead初始化给null
//为了适应未知长度的链表遍历,使用while来遍历链表,最后拿到反转后的表头
while(pHead!=null){
ListNode pNext = pHead.next; // 获取当前数据的指针
// 如果一个数据的指针是null,那么他就是原来链表的表尾,也就是反转后的表头
if(pNext==null){
reHead = pHead; //将当前的数据赋给新表头
}
pHead.next = preHead;//新数据的指针应该指向前一个数据表头
preHead = pHead;//preHead将他的值赋给新指针后,再被赋予当前数据的值
pHead = pNext;// 至此当前数据的反转结束,pHead接受上一个数据的指针值,进行下一轮循环反转
}
return reHead;// 循环结束后,返回反转后的新表头。
#数据结构编程链表#