//有序链表
/**
* 节点类
*/
class Node {
public long data;
public Node next;
public Node(long d) {
this.data = d;
}
public String toString() {
return String.valueOf(data);
}
}
/**
* 有序链表类
*/
class SortedList {
private Node first;
public SortedList() {
first = null;
}
public boolean isEmpty() {
return first == null;
}
public void insert(Node n) {
Node previous = null;
Node current = first;
// 找到要插入的位置,应插入到当前节点的前面
while (current != null && n.data > current.data) {// 直到最后没找到,或者找到时停止
previous = current;
current = current.next;
}
/* //previous为空,说明应该插入到第一个节点前面
* if(previous == null){
* first = n;
* n.next = current;
* }else{//不在最开始的位置,也就是在中间或者尾部
* previous.next = n;
* n.next = current;
* }
* 都需要n.next = current;把这行提出来
*/
if (previous == null)
first = n;
else
previous.next = n;
n.next = current;
}
public Node remove(){
Node temp = first;
first = first.next;
return temp;
}
public String toString(){
if(isEmpty()) return "[]";
StringBuilder sb = new StringBuilder();
sb.append("[");
Node current = first;
while(current != null){
sb.append(current.toString()).append(",");
current = current.next;
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
return sb.toString();
}
public void display() {
System.out.println(toString());
}
}
public class SortedListDemo {
public static void main(String[] args) {
int [] arr = {4,3,1,6,2};
SortedList sl = new SortedList();
Node n;
for(int i=0;i<arr.length;i++){
n = new Node(arr[i]);
sl.insert(n);
System.out.println("插入"+n.toString()+"后,有序链表为:"+sl.toString());
}
while(!sl.isEmpty()){
System.out.print("移除头部:"+sl.remove());
System.out.print(",有序链表为:");
sl.display();
}
}
}
《Java数据结构与算法》笔记-CH5-链表-6实现有序链表
最新推荐文章于 2021-02-28 11:37:30 发布