当前位置:   article > 正文

数据结构——链表(有序链表)

有序链表

单链表

双端链表

有序链表

  1. public class Link {
  2. public long dData;
  3. /**
  4. * 每个Link对象都包含一个对下一个链结点引用字段(next)
  5. * 当前对象数据next对下一个对象数据的引用,形成一种链结
  6. */
  7. public Link next;
  8. public Link(long d){
  9. this.dData = d;
  10. }
  11. public void displayLink(){
  12. System.out.println(dData);
  13. }
  14. }

创建SortedLink

  1. public class SortedLink {
  2. private Link first;
  3. /**
  4. * 添加数据
  5. * @param d
  6. */
  7. public void insert(long d){
  8. //创建对象并赋值
  9. Link newLink = new Link(d);
  10. Link previous = null;
  11. //获取当前数据
  12. Link current = first;
  13. /**
  14. * 判断当前数据是否为null
  15. * 并且插入的值是否大于当前的值
  16. */
  17. while (current != null && d > current.dData){
  18. /**
  19. * 符合条件把current赋值给previous
  20. */
  21. previous = current;
  22. /**
  23. * 当前链结点等于next 下一个链结点
  24. * 沿着链表继续向后移动
  25. * while判断继续循环
  26. */
  27. current = current.next;
  28. }
  29. /**
  30. * previous等于null那么first等于newList新插入的值排在前头;
  31. */
  32. if (previous == null){
  33. first = newLink;
  34. }else{
  35. /**
  36. * previous不等于null,说明有符合 d > current.dData 条件的值插入进来
  37. * previous下一个next就等于newLink新创建的值
  38. */
  39. previous.next = newLink;
  40. }
  41. /**
  42. * 新插入的值的下一个next就等于current
  43. */
  44. newLink.next = current;
  45. }
  46. /**
  47. * 删除头部数据
  48. * @return
  49. */
  50. public long remove(){
  51. //获取当前头部数据
  52. Link temp = first;
  53. //改变first值,让它等于下一个对象的引用
  54. first = first.next;
  55. return temp.dData;
  56. }
  57. /**
  58. * 打印输出
  59. */
  60. public void display(){
  61. System.out.println("输出->");
  62. Link current = first;
  63. while (current != null){
  64. current.displayLink();
  65. current = current.next;
  66. }
  67. }
  68. }

创建Main方法测试

  1. public class SortedLinkMain {
  2. public static void main(String[] args) {
  3. SortedLink sortedLink = new SortedLink();
  4. //添加
  5. sortedLink.insert(50);
  6. sortedLink.insert(20);
  7. sortedLink.insert(30);
  8. sortedLink.insert(10);
  9. sortedLink.insert(40);
  10. //打印
  11. sortedLink.display();
  12. //删除
  13. System.out.println("删除:" + sortedLink.remove());
  14. System.out.println("删除:" + sortedLink.remove());
  15. //再次打印
  16. sortedLink.display();
  17. }
  18. }

控制台输出

  1. 输出->
  2. 10
  3. 20
  4. 30
  5. 40
  6. 50
  7. 删除:10
  8. 删除:20
  9. 输出->
  10. 30
  11. 40
  12. 50
  13. Process finished with exit code 0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/858751
推荐阅读
相关标签
  

闽ICP备14008679号