单链表优点:1.不需要预先给出元素个数。

2.单链表插入删除时不需要移动数据元素。

单链表缺点:1.每个节点有指针,空间利用率低。

2.单链表不支持随机读取数据。

Node.java

package com.sheepmu;

public class Node {
Object value;//结点的数据值
Node next;//下一个结点对象的引用
public Node(Object value, Node next) {//一般结点的构造函数
super();
this.value = value;
this.next = next;
}
public Node(Object value){ //!!!!
this(value,null);
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
} public String toString(){
return value.toString();
}
}

SingleLinkedList.java

package com.sheepmu;

 public class SingleLinkedList{
private Node head;
private Node current;
private int size;
public SingleLinkedList(){
head=current=new Node(null);//初始时令head和current都是头指针,即下一结点为头结点,即数据域为空。
size=0;
} public boolean isEmpty(){
return size==0;
} public int getSize(){
return size;
}
// public void addToFirst(Object obj){//在表头添加
// Node newNode=new Node(obj);
// newNode.next=head;
// head=newNode;
// size++;
// } public void addToLast(Object obj){//在表尾插入结点
Node newNode=new Node(obj);
current=head.next;
while(current.next!=null)
current=current.next;//得到当前尾结点 current.next=newNode;
newNode.next=null;
size++;
} public void insert(int i,Object obj){// 单链表 指定位置前插入
Node newNode=new Node(obj);
Node prve=head;
current=head.next;
int j=0;
while(current!=null&&j<i){
prve=current;
current=current.next;
j++;
}
newNode.next=current;
prve.next=newNode;
size++;
} public void delete(int i){//单链表删除指定位置
Node prve=head;
current=head.next;
int j=0;
while(current!=null&&j<i){
prve=current;
current=current.next;
j++;
}
prve.next=current.next;
size--;
} public Object getValue(int i){//得到结点值
current=head.next;
int j=0;
while(current!=null&&j<i){
current=current.next;
j++;
}
return current.value;
} public void print(){//遍历打印单链表
if(isEmpty())
System.out.println("链表为空");
else{
for(Node current=head.next;current!=null;current=current.next){
System.out.print(current.value+" ");
}
}
}
}

SingleLinkedListTest.java

package com.sheepmu;
/**
* 建立一个线性表,依次输入元素0,1,2...9;然后在第4个位置插入9 ,然后删除数据元素7。最后依次显示当前线性表元素。
* 采用单链表实现。
* @author SheepMu
*
*/
public class SingleLinkedListText {
public static void main(String[] args) throws Exception{
SingleLinkedList singleLinkedList=new SingleLinkedList();
System.out.println("初始线性表:");
for(int i=0;i<10;i++){
singleLinkedList.insert(i, new Integer(i));
}
singleLinkedList.print(); System.out.println("在位置4插入元素9后的线性表:");
singleLinkedList.insert(4, new Integer(9)); singleLinkedList.print(); // System.out.println("表头插入元素0后的线性表:");
// singleLinkedList.addToFirst(new Integer(0));
// singleLinkedList.print(); System.out.println("表尾插入元素0后的线性表:");
singleLinkedList.addToLast(new Integer(0));
singleLinkedList.print(); System.out.println("删除第5个元素后的线性表:");
singleLinkedList.delete(5);
singleLinkedList.print(); } }

单链表---java实现-LMLPHP

05-08 08:15