题解 | #反转链表#

反转链表

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;// 循环结束后,返回反转后的新表头。
#数据结构编程链表#
全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务