【数据结构初阶】反转链表
创始人
2024-04-26 12:06:30

文章目录

  • 问题描述:
  • 思路分析:
  • 代码展示:


问题描述:

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0≤n≤1000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。
输入:{1,2,3}
输出:{3,2,1} (若输入空链表则输出空)

以上转换过程如下图所示:
在这里插入图片描述


思路分析:

  • 采用头插法。从链表的第二个节点开始依次进行头插,直到下一个元素为null时返回head。
    在这里插入图片描述

  • 首先定义一个cur来表示链表的第二个节点,即cur = head.next。

  • 然后将head指向的元素地址置为空,因为反转之后head将是最后一个元素。即head.next = null。
    在这里插入图片描述

  • 因为要对每个节点都要进行头插,因此需要遍历整个链表,即循环条件就是当cur为空时遍历结束。

  • 根据头插法原理,让cur指向head,即cur.next = head。然后新的头节点就是cur,即head = cur。

  • 因为头插法会修改cur的指向,即需要再定义一个节点在修改cur.next前用来保存cur的下一个节点,每次头插结束,让cur等于下一个节点,进行下一次的头插。
    在这里插入图片描述

  • 最后还应考虑到两种特殊情况:当head为空时,直接返回null;当只有一个节点时,直接返回head。


代码展示:

public ListNode ReverseList(ListNode head) {if(head == null){return null;}if(head.next == null){return head;}ListNode cur = head.next;head.next = null;while(cur != null){ListNode curNext = cur.next;cur.next = head;head = cur;cur = curNext;}return head;}

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...