实现单链表的新增操作
链表作为最基本的数据结构,存储特点如下:可以用任意一组存储单元来存储单链表中的数据元素且存储单元可以不是连续的。N个节点连接在一起被称之为链表。当节点只包含其后继节点的信息的链表我们称之为单链表,在内存中存储的方式如下图:
定义链表
class Node { Node node = null; int data; public Node (int data){ this.data = data; } }
链表最重要的操作是向链表中插入元素和从链表中删除元素
单链表的插入操作是将值为X的的新节点插入到链表第i个节点位置上。也就是插入数据在ai - 1 与 ai之间。
-
找到ai - 1的引用(存储位置)p
-
生成一个数据域为x的新节点s
-
设置p.next = s
-
设置s.next = a
单链表的基本操作代码
public class LinkedlistDemo {
/**
定义链表
*/
class Node{
Node next = null;
int data;
public Node (int data){this.data = data;}
}
Node head = null;
/***
* 向链表中插入数据
* @param d 要插入的数据
*/
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;
}
/** add node to end*/
tmp.next = newNode;
}
/***
* 对链表进行排序
* 返回排序后的头节点
*/
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 = nextNode.data;
nextNode.data = temp;
}
nextNode = nextNode.next;
}
curNode = curNode.next;
}
return head;
}
/***
* 返回节点长度
* @return
*/
public int length(){
int length = 0;
Node tmp = head;
while (tmp != null){
length++;
tmp = tmp.next;
}
return length;
}
/***
* 打印list
*/
private void printList() {
Node tmp = head;
while (tmp != null){
System.out.println(tmp.data);
tmp = tmp.next;
}
}
public static void main(String[] args) {
LinkedlistDemo list = new LinkedlistDemo();
list.addNode(1);
list.addNode(11);
list.addNode(3);
list.addNode(4);
System.out.println(list.length());
System.out.println("before ordre:");
list.printList();
list.orderList();
System.out.println("after order");
list.printList();
}
输出结果
listlength:4
before ordre:
1
11
3
4
after order:
1
3
4
11