当前位置:   article > 正文

《数据结构与算法》之链表—有序链表_有序单链表

有序单链表

2、有序链表

有序链表是在单链表的基础上对单链表的表头节点插入进行修改,从表头开始根据插入值与链表中原先存在的数据节点进行比较判断,若大于(或小于)该节点就向后移一个节点进行比较,直至不大于(或小于)该节点,最终实现按照从小到大(或从大到小)的顺序排列链表。

  1. // 插入节点,并按照从小到大的顺序排列
  2. public void insert(int value) {
  3. Node node = new Node(value);
  4. Node previous = null;
  5. Node current = head;
  6. while (current != null && value > current.data) {
  7. previous = current;
  8. current = current.next;
  9. }
  10. if (previous == null) {
  11. head = node;
  12. head.next = current;
  13. } else {
  14. previous.next = node;
  15. node.next = current;
  16. }
  17. }
  18. // 插入节点,并按照从大到小的顺序排列
  19. public void insert(int value) {
  20. Node node = new Node(value);
  21. Node previous = null;
  22. Node current = head;
  23. while (current != null && value < current.data) {
  24. previous = current;
  25. current = current.next;
  26. }
  27. if (previous == null) {
  28. head = node;
  29. head.next = current;
  30. } else {
  31. previous.next = node;
  32. node.next = current;
  33. }
  34. }

另外,相对于有序数组,链表的插入的速度比较快(因为元素不需要移动),同时链表可以扩展到全部有效的使用内存,而数组则只能固定大小。 

在有序链表中插入和删除某一项最多需要O(N)次比较,平均需要O(N/2)次,因为必须沿着链表上一步一步走才能找到正确的插入位置,然而有序链表可以最快速度删除最小值或最大值,因为只需要删除表头即可,如果一个应用需要频繁的存取最值,且不需要快速的插入,那么有序链表是一个比较好的选择方案。比如优先级队列可以使用有序链表来实现。

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/858745
推荐阅读
相关标签
  

闽ICP备14008679号