初學者用java實現基礎的單鏈表
java實現單鏈表
初學者應該實現的基本功能:
//用java實現單鏈表
@SuppressWarnings("all") // 禁止警告
public class LinkedList {
private class Node{
public int value;
public Node next;
public Node(int value) {
this.value = value;
}
} //節點內部類
private int size; //鏈表長度
private Node head,last;//頭節點,尾結點
public LinkedList(){
head = null;
size = 0;
}
//1.插入節點
public void insert(int index,int value){
if(index<0||index>size){
System.out.println("位置不合理!");
}
Node node = new Node(value);
if(index == 0){
node.next = head;
head = node;size++;
}else if(index == size){
last.next = node;
last = node;size++;
}else if(index > 0 && index < size){
Node pre = head;
for(int i=0;i<index-1;i++){
pre = pre.next;
}
Node temp = pre.next;
pre.next = node;
node.next = temp;size++;
}
}
//2.添加節點
public void add(int value){
Node node = new Node(value);
if(head == null){
head = node;last = node;size++;
}else{
last.next = node;
last = node;
size++;
}
}
//3.返回節點
public Node getNode(int index){
if(index<0||index>size){
System.out.println("位置不合理");
}else{
Node node= head;
for(int i=0;i<index;i++){
node = node.next;
}
return node;
}
return null;
}
//4.得到節點值
public int get(int index){
if(index<0||index>=size){
System.out.println("位置不合理");
}else{
Node pre = head;
for(int i=0;i<index;i++){
pre = pre.next;
}
return pre.value;
}
return -1;
}
//5.刪除節點
public int delete(int index){
int value = -1;
if(index<0||index>size){
System.out.println("位置不合理");return -1;
}
if(size == 0){
System.out.println("沒有元素被刪除");return -1;
}
if(index == 0){
value = this.getheader();
head = head.next;size--;
}else if(index == size-1) {
value = this.getlaster();
this.getNode(size-2).next = null;
size--;
}else{
value = this.get(index);
this.getNode(index-1).next = this.getNode(index+1);
size--;
}
return value;
}
//6.判斷是否爲空
public boolean isEmpty(){return size==0;}
//7.返回節點數
public int getSize(){return size;}
//8.返回頭節點值
public int getheader(){return head.value;}
//9.返回尾結點值
public int getlaster(){return last.value;}
//10.對單鏈表從小到大排序(選擇排序)
public void sort(){
for(int i=0;i<size;i++){
int min = i;
for(int j=i;j<size;j++){
if(get(min)>get(j)){
min = j;
}
}
int temp = getNode(min).value;
getNode(min).value = getNode(i).value;
getNode(i).value = temp;
}
}
//11.遍歷單鏈表
public void print(){
if(isEmpty()){
System.out.println("單鏈表爲空表");
}else{
Node pre = head;
for(int i=0;i<size;i++){
System.out.print(pre.value+" ");
pre = pre.next;
}
System.out.println();
}
}
//主測試類
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(3);
list.add(1);
list.add(6);
list.insert(0,10);
list.insert(3,2);
System.out.println("鏈表中索引爲3的值:"+list.get(3));
System.out.println("鏈表的長度:"+list.getSize());
System.out.println("鏈表頭結點的值:"+list.getheader());
System.out.println("鏈表尾結點的值:"+list.getlaster());
list.print();
list.sort();//排序
list.print();
System.out.println("鏈表頭結點的值:"+list.getheader());
System.out.println("鏈表尾結點的值:"+list.getlaster());
}
}
實現結果: