本篇文章列举出了腾讯面试题中的一个单链表的考题,题目是实现单链表的反转。
实现单链表的反转的主要思路如下:
1.首先需要定义一个新的链表reverseHead=newHeroNode();
2.从头到尾遍历原来的链表,每遍历一个结点,就将其从原来的链表当中取出,并放在新的链表reverseHead的最前端
3.将原来的链表的head.next=reverseHead.next,实现对接。
思路可以简单理解为,从链表的头部开始,每找到一个结点,就将其放入新的链表中,再找到第二个结点之后,继续将其放到链表的最前端,也就是第一个结点的前面,以此类推,将单链表进行反转。
代码及注释如下:
//将单链表反转publicstaticvoidreversetList(HeroNodehead){//如果当前链表为空,或者只有一个结点,无需反转,直接返回if(head.next==null
head.next.next==null){return;}//定义一个辅助变量,帮助遍历原来链表HeroNodecur=head.next;HeroNodenext=null;//指向当前结点的下一个结点HeroNodereverseHead=newHeroNode(0,"","");//遍历原来的链表,每遍历一个结点,就将其取出,并放在新的链表的最前端while(cur!=null){next=cur.next;//暂时保存,后面需要使用cur.next=reverseHead.next;//将cur的下一个结点指向新的链表的头结点reverseHead.next=cur;//将cur连接到新的链表上cur=next;//让cur后移}//将head.next指向reberseHead.nexthead.next=reverseHead.next;}
之后我们通过一个例子来验证方法的正确性,运行结果如下:
运行结果正确,注意,最关键的步骤是新旧两个链表的连接,也就是代码中的13到16行。
预览时标签不可点收录于话题#个上一篇下一篇