您的位置:首页 > 其它

单链表常见操作

2012-11-14 15:31 204 查看
public class SinglyLinkList<Item> {
private Node head;
private int N;

private class Node{
Item item;
Node next;

public Node() {
}

public Node(Item item,Node next){
this.item = item;
this.next = next;
}
}

public SinglyLinkList() {
this.head = new Node();
}

public SinglyLinkList(Item[] a){
this();
Node p = this.head;
for(int i=0; i<a.length; i++){
p.next = new Node(a[i],null);	//尾插
p = p.next;
N++;
}
}

public boolean isEmpty(){
return N==0;
}

public int size(){
return N;
}
/**
* 返回第i个元素
*/
public Item get(int i){
if(i>0 && i<=N){
Node p = this.head.next;
for(int j=1; j<i; j++)
p = p.next;
return p.item;
}
return null;
}

/**
* 在第i个结点前插入x
*/
public void insert(int i,Item x){
if(x==null)
return;
if(i>=1 && i<=N){
Node p = this.head;
for(int j=1; j<i; j++)
p = p.next;
p.next = new Node(x,p.next);
N++;
}
}

/**
* 删除第i个结点
*/
public Item remove(int i){
if(i<1 || i>N)
return null;
else{
Node p = this.head;
for(int j=1; j<i; j++)
p = p.next;
Item item = p.next.item;
p.next = p.next.next;
N--;
return item;
}
}
/**
* 删除单链表所有元素
*/
public void removeAll(){
this.head.next = null;
N = 0;
}

/**
* 将链表逆序
*/
public void reverse(){
Node p = this.head.next,second=null,reverse=null;
while(p!=null){
second = p.next;
p.next = reverse;
reverse = p;
p = second;
}
this.head.next = reverse;
}

/**
* 遍历单链表中所有元素
*/
public void display(){
Node p = this.head.next;
System.out.println("链表中所有元素为:");
if(N==0){
System.out.println("此链为空!");
return;
}
while(p!=null){
System.out.print(p.item+" ");
p = p.next;
}
System.out.println();
}

public static void main(String[] args) {
String[] s = {"A","B","C","D","E"};
SinglyLinkList<String> sll = new SinglyLinkList<String>(s);
sll.display();
System.out.println("链中第1个元素为:"+sll.get(1));
System.out.println("链中第5个元素为:"+sll.get(5));
//		sll.insert(1, "X");
//		sll.display();
//		sll.remove(1);
//		sll.remove(3);
//		sll.display();
//		sll.reverse();
//		sll.display();
sll.removeAll();
sll.display();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: