1.
//实现单链表的反转
public void reverseList(HeroNode head){
if(head.next==null||head.next.next==null){
return;
}
HeroNode reserveHead = new HeroNode(0,"","");
HeroNode next = null;
HeroNode cur = head.next;
while(cur!=null){
next = cur.next; //先暂时保存当前节点的下一个节点。后面使用
cur.next=reserveHead.next; //.next 在等式的右边时,看做是一个对象。在插入第一个节点的时候为空。这是添加右边的连接
reserveHead.next = cur; //添加左边的连接
cur = next; //将cur连接到新的链表上。
}
//将head替换reserveHead这个头节点。
head.next =reserveHead.next;
}
注意问题:在遍历和添加链表的时候,判断是否到链表的末尾。辅助节点和判断的时候只允许存在一个next;
2.只实现链表的反向打印,不改变链表的结构。利用栈先进后出的原理。
//实现链表的逆序打印
public void reversePrint(HeroNode head){
Stack<HeroNode> stack =new Stack<>();
HeroNode cur = head.next;
while (cur!=null){
stack.push(cur);
cur = cur.next;
}
while (stack.size()>0){
System.out.println(stack.pop());
}
}