java怎么写链表( 三 )


那么如何得到当前结点呢,我们定义了一个方法cursor(),返回值是指向当前结点的指针 。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作 。
例如reset()方法使第一个结点成为当前结点 。insert(Object d)方法在当前结点前插入一个结点,并使其成为当前结点 。
remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最 后一个结点,则第一个结点变为当前结点 。链表类List的源代码如下: import java.io.*; public class List { /*用变量来实现表头*/ private Node Head=null; private Node Tail=null; private Node Pointer=null; private int Length=0; public void deleteAll() /*清空整个链表*/ { Head=null; Tail=null; Pointer=null; Length=0; } public void reset() /*链表复位,使第一个结点成为当前结点*/ { Pointer=null; } public boolean isEmpty() /*判断链表是否为空*/ { return(Length==0); } public boolean isEnd() /*判断当前结点是否为最后一个结点*/ { if(Length==0) throw new java.lang.NullPointerException(); else if(Length==1) return true; else return(cursor()==Tail); } public Object nextNode() /*返回当前结点的下一个结点的值,并使其成为当前结点*/ { if(Length==1) throw new java.util.NoSuchElementException(); else if(Length==0) throw new java.lang.NullPointerException(); else { Node temp=cursor(); Pointer=temp; if(temp!=Tail) return(temp.next.data); else throw new java.util.NoSuchElementException(); } } public Object currentNode() /*返回当前结点的值*/ { Node temp=cursor(); return temp.data; } public void insert(Object d) /*在当前结点前插入一个结点,并使其成为当前结点*/ { Node e=new Node(d); if(Length==0) { Tail=e; Head=e; } else { Node temp=cursor(); e.next=temp; if(Pointer==null) Head=e; else Pointer.next=e; } Length++; } public int size() /*返回链表的大小*/ { return (Length); } public Object remove() /*将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/ { Object temp; if(Length==0) throw new java.util.NoSuchElementException(); else if(Length==1) { temp=Head.data; deleteAll(); } else { Node cur=cursor(); temp=cur.data; if(cur==Head) Head=cur.next; else if(cur==Tail) { Pointer.next=null; Tail=Pointer; reset(); } else Pointer.next=cur.next; Length--; } return temp; } private Node cursor() /*返回当前结点的指针*/ { if(Head==null) throw new java.lang.NullPointerException(); else if(Pointer==null) return Head; else return Pointer.next; } public static void main(String[] args) /*链表的简单应用举例*/ { List a=new List (); for(int i=1;i<=10;i++) a.insert(new Integer(i)); System.out.println(a.currentNode()); while(!a.isEnd()) System.out.println(a.nextNode()); a.reset(); while(!a.isEnd()) { a.remove(); } a.remove(); a.reset(); if(a.isEmpty()) System.out.println("There is no Node in List \n"); System.in.println("You can press return to quit\n"); try { System.in.read(); //确保用户看清程序运行结果 } catch(IOException e) {} } } class Node /*构成链表的结点定义*/ { Object data; Node next; Node(Object d) { data=http://www.xuexi88.com/zhishi/d; next=null; } } 。
4.求一个JAVA的单链表程序package OS;
public class IntNode
{
public String name;
//public int run_time=44;
public int run_time=(int)(Math.random()*100);
public IntNode next;
public int num;
public IntNode(int n,String n1){
this(n,n1,null);
}
public IntNode(int n,String n1,IntNode nn){
num=n;
name=n1;
next=nn;
}
}
package OS;
public class IntSLList
{
public IntNode head;//头尾“指针”
public IntNode tail;
public IntSLList(){
head=tail=null;
}
//判别链表是否为空
public boolean isEmpty(){