1. 程式人生 > >單鏈表基本操作java實現

單鏈表基本操作java實現

單鏈表基本操作 - java實現

1.單鏈表學習了好久,今天終於有時間寫一下了,帶頭結點的單鏈表上的基本操作,Java實現。

(1) 先來個介面

public interface IList {
	public void clear();	//清空連結串列
	public boolean isEmpty();	//連結串列判空
	public int length();	//連結串列的長度
	public Object get(int i) throws Exception;	//按照位序號查詢
	public void insert(int i,Object x) throws Exception;	//新增節點
	public void remove(int i) throws Exception;		//刪除節點
	public int indexOf(Object x);	//按照資料查詢位序號
	public void display();		//輸出連結串列
}

(2)Java實現單鏈表
//節點的定義
class Node{
	public Object data;
	public Node next;
	//無參構造方法
	public Node(){
		this(null,null);
	}
	//一個引數的構造方法
	public Node(Object data){
		this(data,null);
	}
	//兩個引數的構造方法
	public Node(Object data, Node next){
		this.data = data;
		this.next = next;
	}
}

//單鏈表定義
public class LinkList implements IList{
	public Node head;
	
	//構造方法
	public LinkList(){
		head = new Node();
	}
	//清空連結串列
	@Override
	public void clear() {
		// TODO Auto-generated method stub
		head.data = null;
		head.next = null;
	}
	//連結串列判空
	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return head.next == null;
	}
	//連結串列長度
	@Override
	public int length() {
		// TODO Auto-generated method stub
		Node p = head.next;
		int length = 0;
		while(p!=null){
			p=p.next;
			length++;
		}
		return length;
	}
	//按位序號查詢
	@Override
	public Object get(int i) throws Exception{
		// TODO Auto-generated method stub
		Node p = head.next;
		int j = 0;
		while(p!=null&&j<i){
			p = p.next;
			++j;
		}
		if(j>i || p == null){
			throw new Exception("第"+i+"個元素不存在");
		}
		return p.data;
	}
	//插入元素
	@Override
	public void insert(int i, Object x) throws Exception{
		// TODO Auto-generated method stub
		Node p = head;
		int j = -1;
		while(p!=null && j<i-1){
			p = p.next;
			j++;
		}
		if( j>i-1 || p==null){
			throw new Exception("插入位置不合法");
		}
		Node s = new Node(x);
		s.next = p.next;
		p.next = s;
	}
	//刪除元素
	@Override
	public void remove(int i) throws Exception {
		// TODO Auto-generated method stub
		Node p = head;
		int j = -1;
		while(p.next != null && j < i-1){
			p = p.next;
			j++;
		}
		if(p.next == null || j > i-1){
			throw new Exception("刪除位置不存在");
		}
		p.next = p.next.next;
	}
	//根據值查詢位序號
	@Override
	public int indexOf(Object x) {
		// TODO Auto-generated method stub
		Node p = head.next;
		int j=0;
		while(p.next != null && !p.data.equals(x)){
			p = p.next;
			j++;
		}
		if(p.next != null){
			return j;
		} 
		else {
			return -1;
		}
	}
	//輸出連結串列
	@Override
	public void display() {
		// TODO Auto-generated method stub
		Node p = head.next;
		int j = 0;
		while(p != null){
			System.out.println("第"+j+"個節點是:"+p.data);
			p = p.next;
			j++;
		}
	}
/*
 * 測試用的,忽略
 */
//	public static void main(String[] args) throws Exception{
//		LinkList mylist = new LinkList();
//		mylist.insert(0,0);
//		mylist.insert(1,1);
//		mylist.insert(2,2);
//		mylist.insert(3,3);
//		mylist.insert(2,4);
//		mylist.display();
//		System.out.println(mylist.indexOf(2));
//		System.out.println(mylist.get(3));
//		mylist.remove(3);
//		mylist.display();
//		System.out.println(mylist.isEmpty());
//		System.out.println(mylist.indexOf(7));
//		mylist.clear();
//		System.out.println(mylist.isEmpty());
//	}
}