赞
踩
实现单链表的思路:
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()); } }
菜鸟一个,有什么问题请留言咨询
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。