單鏈表基本操作java實現
阿新 • • 發佈:2018-12-26
單鏈表基本操作 - 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()); // } }