标题:使用Java,手写链表
1.首先声明节点的样式:
class IntNode{
public int info;
public IntNode next;
public IntNode(int info) {
this(info,null);
}
public IntNode(int info,IntNode next) {
this.info=info;
this.next=next;
}
}
2.写一个类似LinkedList样式的链表
class IntNodeList{
private IntNode head;
private IntNode tail;
//后面可以添加一系列的操作【增,删,改,查】,可以见下面的完整代码
}
完整代码如下:
/**
* 测试手写链表 【9.19】
* @author dell
*
*/
class IntNode{
public int info;
public IntNode next;
public IntNode(int info) {
this(info,null);
}
public IntNode(int info,IntNode next) {
this.info=info;
this.next=next;
}
}
class IntNodeList{
private IntNode head;
private IntNode tail;
/**
* 添加节点->头部
* @param info
*/
public void addToHead(int info) {
head=new IntNode(info,head);
if(tail==null) {
tail=head;
}
}
/**
* 添加节点-->尾部
*/
public void addToTail(int info) {
if(null==tail) {
head=new IntNode(info);
tail=head;
}else {
tail.next=new IntNode(info);
tail=tail.next;
}
}
/**
* 从头部删除--》节点
*/
public IntNode deleteFromHead() {
IntNode p=head;
if(head!=null) {
head=head.next;
if(head==null) {
tail=null;
}
}
return p;
}
/**
* 从尾部删除-》节点
*/
public IntNode deleteFromTail() {
IntNode p=tail;
if(tail!=null) {
if(head==tail) {
head=null;
tail=null;
}else {
IntNode s=head;
while(s.next!=tail) {
s=s.next;
}
tail=s;
tail.next=null;
}
}
return p;
}
/**
* 按索引查找节点
*/
public IntNode getByIndex(int index) {
IntNode p=head;
for(int i=1;i<index && p!=null;i++,p=p.next) {
}
return p;
}
/**
* 输出所有节点
*/
public void printAllInfo() {
IntNode p=head;
while(p!=null) {
System.out.print(p.info+" ");
p=p.next;
}
System.out.println();
}
}
public class TestIntNodeList {
public static void main(String[] args) {
IntNodeList myList = new IntNodeList();
System.out.println("测试添加元素--》头部");
myList.addToHead(1);
myList.addToHead(2);
myList.addToHead(3);
myList.addToHead(4);
myList.printAllInfo();
System.out.println("测试添加元素到--》尾部");
myList.addToTail(9);
myList.addToTail(10);
myList.addToTail(11);
myList.addToTail(12);
myList.printAllInfo();
System.out.println("测试从头部删除--》元素");
IntNode p = myList.deleteFromHead();
if(p!=null) {
System.out.println(p.info);
}
p = myList.deleteFromHead();
if(p!=null) {
System.out.println(p.info);
}
myList.printAllInfo();
System.out.println("测试从尾部删除-->元素");
p=myList.deleteFromTail();
if(p!=null) {
System.out.println(p.info);
}
p=myList.deleteFromTail();
if(p!=null) {
System.out.println(p.info);
}
myList.printAllInfo();
System.out.println("测试获取指定索引的--》值");
p = myList.getByIndex(2);
if(p!=null) {
System.out.println(p.info);
}
}
}