初学者用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());
}
}
实现结果: