單鍊錶:
* 1.鍊錶可以是一種有序或無序的清單
* 2.鍊錶的內容通常儲存在記憶體中分散的為止
* 3.鍊錶由節點組成,每一個節點具有相同的結構
* 4.節點分為資料域和鏈域,資料域存放節點內容,鏈域存放下一個節點的指標
package myLinkList;
public class MyLinkedList
/**
*Node:節點物件
* 包含資料域data和鏈域next(指向下一個節點物件)
*/
class Node {
private T data;
private Node next;
public Node( ){
}
//節點初始化
public Node(T data,Node next){
this.data = data;
}
}
private Node header;//鍊錶頭節點
private Node tailer;//鍊錶尾節點
private int size;//鍊錶長度(節點個數)
/**
* 鍊錶初始化
*/
public MyLinkedList() {//空參構造
header = null;
tailer = null;
# }
public MyLinkedList(T data) {//有參構造
header = new Node(data,null);//創建頭結點
tailer = header;
size++;
}
/**
* 求鍊錶長度
* @return
*/
public int getSize() {
return size;
}
/**
* 傳回索引為index的節點的資料
* @param index 索引
* @return
*/
public T get( int index) {
if(index < 0 || index > size-1)
throw new IndexOutOfBoundsException("索引越界");
public Node getIndexNode(int index){
if(index < 0 || index > size-1)
throw new Index。BoundsException("索引越界" throw new Index BoundsException("索引越界" = header;
for(int i = 0;i < size; i++) {
if(i == index) {
return current;# current; ;
}
return null;
}
/**
* 傳回element在在鍊錶位置,如果不存在,則回傳-1
* @param tdata
* @return
#*/
public int getIndex(T element) {
if(element == null)
return -1;
Node current = header;
for(int i = 0; i < size; i++) {
i;
}
current = current.next;
}
return -1;
}
# /**
* 在鍊錶末端加上element
* @param element
#*/
public void add(T element) {
Node n = new Node(element,null);
if(header == null){
header = n;
er
}else{
tailer.next = n;
tailer = n;
}
size++;
}
# /**
* 在鍊錶頭新增element
* @param element
#*/
public void addAtheader(T element) {
header = new Node(element,header);
if(tailer == null){
tailer = };
}
/**
* 在index位置後邊插入元素
* @param index
* @param element
*/
public void insert(int index,T element) {
if(index<0 || index>size-1) {
throw new IndexOutOfBoundsException("索引越界");
}
if(header==null){
==0 ){
addAtheader(element);
}else{
Node current = getIndexNode(index);## Node current = NodeIndexNode(index);
腳 腳); ## current.next = insertNode;
size++;
}
}
}
/**
* 刪除任意位置的節點
* @param index
* @return
*/# public T deleteNode(int. | index>size-1)
throw new IndexOutOfBoundsException("索引越界");
if(index == 0){//在頭部刪除元素
頭記錄/?節點
header = header.next;//將頭指標指向下一個節點
size--;
return n.data;///輸出節點的內容#/// 輸出節點的內容#」// 輸出節點的內容#////}其他位置刪除
Node current = getIndexNode(index);//取得目前節點
Node pre = getIndexNode(index-1);//取得前一個節點
pre = getIndexNode(index-1);//取得前一個節點
/將前一個節點的鏈域設為null
size--;
return current.data;//返回刪除節點的數據域
}
}
/**
* 刪除頭節點
* @return
*/
public T deleteHeader(){
return deleteNode(0);
}
/**
* 刪除尾節點
* @return
*/
public T deleteTailer() {
return deleteNode(size-1);
}
//清空節點
public void clear(){
# 頭= null;
尾= null;
尺寸= 0;
}
/**
* toString();
*/
public String toString(){
if(size == 0)
return "[]";
Node current = header;
StringBuilder sb = new StringBuilder();
sb.append(" [");
while(current.next != null) {
sb.append(current.data).append(" ");
current = current.next;
}
sb.append(current.data).append("]");
傳回sb.toString();
}
## public static void main(String[] args) {
MyLinkedList
link.add("header");
link.add("11");
link.add("22");
link .add("33");
link.addAtheader("newheader");
link.insert(2, "1.5");;
System. out.println(link.getIndex ("11"));
★System.out.println(link.getIndex("88"));
★System.out.println(link.get(0) );
★System.out. println(link.getSize());
System.out.println(link.deleteHeader());
System.out.println(link.deleteTailer( ));
System.out.println( link.deleteNode(1));
、System.out.println(link);
、link.clear();
、System. out.println(link);
、}
##}以上是java中單鍊錶的介紹以及用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!