- 第一题,求单链表中有效节点的个数
- 第二题,查找单链表中倒数第K个结点
- 第三题,单链表的反转
- 第四题,从尾到头打印单链表
package com.spx.list;
import java.util.Stack;
public class SingleLinkedListDemo {
public static void main(String[] args) {
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
SingleLinkedList singleLinkedList = new SingleLinkedList();
System.out.println("有效的节点个数为"+getLength(singleLinkedList.getHead()));
HeroNode res=findLastIndexNode(singleLinkedList.getHead(), 1);
System.out.println("res="+res);
System.out.println("原来链表的情况");
singleLinkedList.list();
System.out.println("反转单链表");
reversetList(singleLinkedList.getHead());
singleLinkedList.list();
System.out.println("测试逆序打印单链表,没有改变链表的本身结构");
reversePrint(singleLinkedList.getHead());
}
public static void reversePrint(HeroNode head) {
if(head.next == null) {
return;
}
Stack<HeroNode> stack = new Stack<HeroNode>();
HeroNode cur = head.next;
while(cur != null) {
stack.push(cur);
cur = cur.next;
}
while(stack.size()>0) {
System.out.println(stack.pop());
}
}
public static void reversetList(HeroNode head) {
if(head.next==null || head.next.next == null) {
return;
}
HeroNode cur = head.next;
HeroNode next = null;
HeroNode reverseHead = new HeroNode(0, "", "");
while(cur != null) {
next=cur.next;
cur.next=reverseHead.next;
reverseHead.next = cur;
cur = next;
}
head.next=reverseHead.next;
}
public static HeroNode findLastIndexNode(HeroNode head,int index) {
if(head.next == null) {
return null;
}
int size=getLength(head);
if(index <= 0 || index > size) {
return null;
}
HeroNode cur =head.next;
for(int i=0 ; i < size-index ; i++) {
cur=cur.next;
}
return cur;
}
public static int getLength(HeroNode head){
if(head.next==null){
return 0;
}
int length=0;
HeroNode cur=head.next;
while(cur != null){
length++;
cur=cur.next;
}
return length;
}
}
class HeroNode{
public int no;
public String name;
public String nickName;
public HeroNode next;
public HeroNode(int no,String name,String nickName) {
this.no=no;
this.name=name;
this.nickName=nickName;
}
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName+"]";
}
}