java单链表中,要有增删改查、定位、排序、输出、输入、获取长度等方法。
import java.util.Scanner;
public class List {
public class Node{
public int data;
public Node next;
public Node(int data){
this.data = data;
}
}
private Node head;
public Node getHead(){
return head;
}
public int getLength()
{
Node node = head;
int k = 0;
while(node != null){
k++;
node = node.next;
}
return k;
}
public Node Locate(int index){
if(index <= 0)return null;
Node node = head;
int k = 1;
while(node != null && k < index){
k++;
node = node.next;
}
return node;
}
public void input(int n){
if(n <= 0)return;
Scanner reader = new Scanner(System.in);
int value = reader.nextInt();
head = new Node(value);
Node node = head;
int k = 1;
while(k < n){
k++;
value = reader.nextInt();
node.next = new Node(value);
node = node.next;
}
}
public void print(){
Node node = head;
while(node != null){
System.out.print(node.data + " ");
node = node.next;
}
}
public void insert(int index, Node node){
if(index <= 0 || index > getLength())return;
Node cur = Locate(index);
node.next = cur.next;
cur.next = node;
}
public void delete(int index){
if(index <= 0 || index > getLength())return;
Node node = Locate(index - 1);
Node del = node.next;
node.next = del.next;
}
public void setData(int index, int data){
if(index <= 0 || index > getLength())return;
Node node = Locate(index);
node.data = data;
}
public int getData(int index){
if(index <= 0 || index > getLength())return -1;
Node node = Locate(index);
return node.data;
}
public void sort(){
Node cur = head;
Node tmp = null;
while(cur != tmp){
while(cur.next != tmp){
if(cur.data > cur.next.data){
int temp = cur.data;
cur.data = cur.next.data;
cur.next.data = temp;
}
cur = cur.next;
}
tmp = cur;
cur = head;
}
}
public static void main(String[] args) {
List L = new List();
System.out.println("请输入链表中的数据");
L.input(6);
System.out.println("链表的长度为:" + L.getLength());
System.out.println("排序后的链表为");
L.sort();
L.print();
L.setData(4, 1000);
System.out.println("把第4个数据修改为1000, 修改后如下");
L.print();
System.out.println("链表中第3个数据为: " + L.getData(3));
L.delete(2);
System.out.println("删除链表中的第2个数据后,结果如下");
L.print();
}
}