一、前言
在系统的学习了链表这一块的知识了之后,我对于链表这块的知识点也算是彻底搞懂了,今天就来给大家讲讲关于反转链表这回事,我的一个小理解,如有不对欢迎大家随时指正。写在博客上也算是我自己的一个记录,怕后来又忘了哈哈。
二、题目描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0\leq n\leq10000≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
示例1
输入:
{1,2,3}返回值:
{3,2,1}示例2
输入:
{}返回值:
{}说明:
空链表则输出空
三、题目解析
放上我自己总结的一张图。写的字不好大家谅解哈哈哈哈。
我觉得下面这个动图可以帮助我们理解,现在放上动图。希望可以帮助到大家!
四、代码片段
package everyday.nowcoder;
/**
* @Author: wenjingyuan
* @Date: 2022/09/29/19:30
* @Description:反转链表
* https://www.nowcoder.com/practice/
* 75e878df47f24fdc9dc3e400ec6058ca?tpId=295&tqId=23286&ru=/exam/
* oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2
* Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%
* 25AF%2587%26topicId%3D295
*/
public class NumBM1 {
public ListNode ReverseList(ListNode head) {
//新链表
ListNode newHead =null;
while(head!=null){
//先保存一下访问节点的下一个节点
//留着到下一步访问
ListNode temp=head.next;
//把新链表挂在原来链表的后面就可以了
head.next=newHead;
//更新新链表的头结点
newHead=head;
//继续到下一步
head=temp;
}
return newHead;
}
}
五、总结
我学会是因为看了下面这篇文章,我放在下面的链接里,博主写的超级好,帮了我很多大家有需要大家可以看看。