实现单链表的反转
真的是要被这题搞死了,这个问题看了几个小时,刚开始怎么都理解不了,还是很有难度的题目
整体分析:
代码实现:
//方法:将单链表进行反转
public static void reverseList(HeroNode head){
//如果当亲链表为空或者只有一个节点,直接返回
if(head.next==null ||head.next.next==null){
return;
}
//定义一个辅助变量,遍历原来的链表
HeroNode cur = head.next;
HeroNode next = null;//指向当前节点cur的下一个节点
HeroNode reverseHead = new HeroNode(0,"","");
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的节点reverseHead的最前端
while (cur!=null){
next = cur.next;//先暂时保存当前节点的下一个节点,下面要使用
cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
reverseHead.next=cur;//将cur连接到新的链表上
cur = next;//让cur后移
}
//将head.next指向reverseHead.next ,实现单量表的反转
head.next = reverseHead.next;
}
代码细节分析:
while (cur!=null){
next = cur.next;
cur.next = reverseHead.next;
reverseHead.next=cur;
cur = next;
}
第一次循环后的结果:
第二次循环后的结果:
第三次循环的结果:
第四层循环的结果:
因此最终结果为: