链表的存储特点如下:可以用任意一组存储单元来存储链表中的数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素Ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素Ai的存储映像称为结点。N个结点链在一块称为链表,当结点只包含其后继系欸点的信息的链表就被称为单链表。
在Java语言中,可以定义如下数据类来存储结点信息。
class Node{
Node next = null;
int data;
public Node(int data){
this.data = data;
}
}
链表最重要的操作就是向链表中插入元素和从链表中删除元素。
示例:
public class MyLinkedList{
Node head = null; //链表头的引用
//向链表中插入数据
public void addNode(int d){
Node newNode = new Node(d);
if(head = null) {
head = newNode;
return;
}
Node tmp = head;
while(tmp.next != null) {
tmp = tmp.next;
}
//添加结点在尾部
tmp.next = newNode;
}
//删除第index个结点
public Boolean deleteNode(int index){
if(index < 1 || index > length()){
return false;
}
if(index == 1) {
head = head.next;
return true;
}
int i =1;
Node preNode = head;
Node curNode = preNode.next;
while(curNode != null) {
if(i == index){
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
retrun true;
}
//返回结点长度
public int length(){
int length = 0;
Node tmp = head;
while(tmp != null) {
length++;
tmp = tmp.next;
}
return length;
}
//对链表进行排序
public Node orderList(){
Node nextNode = null;
int temp = 0;
Node curNode = head;
while(curNode.next != null) {
nextNode = curNode.next;
while(nextNode != null) {
if(curNode.data > nextNode.data) {
temp = curNode.data;
curNode.data = next.data;
nextNode.data = temp;
}
nextNode = nextNode.next;
}
curNode = curNode.next;
}
return head;
}
public void printList(){
Node temp = head;
while(temp != null) {
System.out.println(tmp.data);
tmp = tmp.next;
}
}
public static void main(String []args){
MyLinkerList list = new MyLinkedList();
list.addNode(5);
list.addNode(3);
list.addNode(1);
list.addNode(3);
System.out.printnln("before order:");
list.printList();
list.orderList();
System.out.println("after order:");
list.printList();
}
}