实现单链表的思路:
1.新建一个头节点reverseHead,将原来链表的节点按顺序插入的新建头节点的头部。
2.定义一个为cur的节点来指向需要被插入到新链表的节点。
3.定义一个temp来指向cur后面的节点,防止断链。
4.将cur插入新链表。
5.将head.next指向反转后新链表的头部
以下是代码实现:
//利用头插法实现单链表反转
public void reverseLinkedList() {
//单链表为空或者只有一个节点不需要反转
if (head.next==null||head.next==null){
return;
}
//定义一个反转头节点
HeroNode reverseHead=new HeroNode(0,"");
//定义一个cur指向需要插入reverseHead头部的节点
HeroNode cur=head.next;
//定义一个temp来保存cur之后的节点,防止断链
HeroNode temp=new HeroNode(0,"");
while (true){
//遍历到链表最后一个节点
if (cur==null){
break;
}
//将temp.next指向cur后面的节点(防止断链)
temp.next=cur.next;
//将cur.next指向reverseHead的后一位节点(防止断链)
cur.next=reverseHead.next;
//将cur添加到reverseHead后方
reverseHead.next=cur;
//cur指向下一个需要被插入的节点
cur=temp.next;
}
//haed.next指向反转后的链表头部
head.next=reverseHead.next;
}
利用栈的先进后出来实现反向打印链表。
1.将单向链表的节点压入栈中。
2.数据出栈打印。
//利用栈来反向打印单链表
public void reversePrint(){
//新建一个栈
Stack stack=new Stack();
//定义一个temp来遍历链表
HeroNode temp=head;
//遍历链表
while (true){
//循环到最后一个节点时退出
if (temp.next==null){
break;
}
//将temp.next压入栈中
stack.add(temp.next);
//temp后移
temp=temp.next;
}
//因为栈的大小是变化的,所以定义一个常量来保存栈的大小
int j=stack.size();
//将栈中的所有数据移出打印
for (int i=0;i<j;i++){
System.out.println(stack.pop().toString());
}
}
菜鸟一个,有什么问题请留言咨询