public class Node {this
//指針域 public Node next; //數據域 public int data; public Node(int data){ this.data=data; }
}指針
public class Link_list {code
private Node head; private Node current; //給size的目的是,當判斷邊界的時候,不須要去求長度 private int size=0; //初始化頭結點 public Link_list(){ this.head=null; } //向鏈表中添加數據,都是經過尾部插入的 public void addHead(Link_list head,int data){ //主要考慮兩種狀況,1 一個節點都沒有,2 有節點的狀況 //建立一個新的節點 Node temp = new Node(data); //新節點的next指向head.head temp.next = head.head; //head.head指向新建立的節點 head.head=temp; size++; System.out.println(temp.data); } public void add_index(Link_list head,int i,int x){ if(i==0) { addHead(head,x); return; } //判斷插入索引的位置是否符合條件 if(i<0||i>size) { System.out.println("插入的索引位置有誤"); return; } //若是程插入進行到此步時,說明該鏈表有很多於一個點,因此j=1 int j=1; Node p=head.head; ///找到索引i的位置 while(p.next!=null&&j<i){ j++; p=p.next; } Node s =new Node(x); s.next=p.next; p.next=s; size++; System.out.println(s.data); } //經過索引獲取值 public int getElement(Link_list head,int i)throws Exception{ int j=0; //我所給的索引位置是從0開始,而我記錄的size也是從0開始的 if(i<0||i>size) throw new IndexOutOfBoundsException("查找的索引位置出錯"); Node p =head.head; while (p!=null&&j<i){ p=p.next; j++; } if(j>i) throw new Exception("查找的索引位置出錯"); return p.data; } //經過索引刪除值 public void delete_list(Link_list head,int i) throws Exception{ if(i<0||i>=size) throw new Exception("刪除索引位置出錯"); int j=0; Node p = head.head; if(i==0) { head.head = p.next; return; } //找出刪除索引的前一個 while (p.next!=null&&j<i-1){ p=p.next; j++; } p.next=p.next.next; } public static void main(String[] args) throws Exception { Link_list list = new Link_list(); list.add_index(list,0,110); list.add_index(list,0,111); list.add_index(list,2,123); list.delete_list(list,2 ); System.out.println(list.getElement(list,0)); System.out.println(list.getElement(list,1)); }
}索引