一.获得单链表节点个数
简单
public static int showHeadNumbers(HeroNode headNode) {
HeroNode tmp = HeadNode;
int count = 0;
while (tmp.next != null) {
count++;
tmp = tmp.next;
}
return count;
}
二.获得单链表倒数第n个节点
1.获得倒数第index个节点信息 , 倒数第一个就是正数的(总数-1).next个 倒数第二个就是正数的(总数-2).next个
所以使用for循环 到第 (总数-1) 个,然后取 (总数-1).next 即可
public HeroNode getReciprocalHead(HeroNode headNode, int index) {
if (headNode.next == null) {
return null;
}
int allNumbers = showHeadNumbers(headNode);
if (index > allNumbers || index < 0) {
return null;
}
HeroNode tmp = headNode;
for (int i = 0; i <=allNumbers - index; i++) {
tmp=tmp.next;
}
return tmp; }}
三.反转链表
1.用来存倒序的新链表 2.保存指针位置,也是取出的哪一个节点 3.保存取出的那一串链表,以便 指针后移
注意链表是一串 tmp.next = newHeroNode.next; newHeroNode.next =tmp; 将一个节点拆开到新的链表
public HeroNode getReverseHeroNode(HeroNode headNode) {
HeroNode newHeroNode = new HeroNode(0, "", ""); //用来存倒序的新链表
HeroNode tmp = headNode.next; // 保存指针位置,也是取出的哪一个节点
HeroNode removedTmp; //保存取出的那一串链表
while (tmp!=null){
removedTmp=tmp.next; //先将后面的保存起来
tmp.next = newHeroNode.next; //把取出的节点的下一位指向 新链表的下一位
newHeroNode.next =tmp; 把新链表的下一位 指向取出的节点
tmp=removedTmp;
}
headNode.next=newHeroNode.next;
return headNode; }
四.倒序打印链表(利用栈)
* 在不改变链表结构下,将链表倒序打印 循环链表放入栈,利用栈先进先出原理打印
public void showReverseHeroNode(HeroNode heroNode) {
if (heroNode.next == null) {
System.out.println("链表为空!");
return;
}
Stack<HeroNode> stackheroNode = new Stack<HeroNode>();
HeroNode cur = heroNode.next;
while (cur != null) {
stackheroNode.push(cur);
cur = cur.next;
}
while (stackheroNode.size() > 0) {
System.out.println(stackheroNode.pop()); }}