详细图文——有序链表

前篇->双端链表
       在某些应用场景中我们需要链表中的数据是有序的,例如优先级队列,堆。如果有有序链表就好了。我们可以获得链表中的最大或者最小值(看你是啥样的排序)。
       有序链表的核心就是在插入部分,我们需要遍历链表的结点从而找到合适的插入位置,从而保持链表有序状态。

实现有序链表

单链表相关代码下载

public class SortedList {

	private LinkNode head;
	
	public SortedList(){
		head = null;
	}
	
	public boolean isEmpty(){
		return head==null;
	}
	
	//按照顺序插入小->大
	public void insert(int data){
		LinkNode newNode = new LinkNode(data);
		LinkNode previous = null;//previous是必须的,用于记录前一个节点
		LinkNode current = head;
		//寻找合适的插入位置
		while(current!=null&&data>current.getIdata()){
			previous = current;
			current = current.getNext();
		}
		//插入新的结点
		if(previous==null){
			head = newNode;
		}else{
			previous.setNext(newNode);
		}
		newNode.setNext(current);
	}
	
	public LinkNode remove(){
		LinkNode temp = head;
		head = head.getNext();
		return temp;
	}
	//取得最小值
	public LinkNode getMin(){
		return head;
	}
	
	public void displayList(){
		LinkNode current = head;
		while(current!=null){
			current.displayNode();
			current = current.getNext();
		}
		System.out.println();
	}
	
}

TestMain:

public class TestMain {
	public static void main(String[] args) {
		SortedList list = new SortedList();
		list.insert(1);
		list.insert(3);
		list.insert(2);
		list.insert(5);
		list.displayList();//1  2  3  5 
		System.out.println(list.getMin().getIdata());//1
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值