当前位置:   article > 正文

数据结构-链表、栈和队列_链表 栈 队列

链表 栈 队列

拖了N天的一篇博客...本来学完链表就应该写了,但是链表题比较多,难度也不小,于是就小拖了一下,今天把栈和队列的题也弄完了终于...来还债了。

3.5上迪希雅!一整个期待住了,须弥最喜欢的角色之一!

链表

线性结构存储,无需担心扩容问题,头插方便,如果是双向链表的话,对尾的操作也很方便。带头的用起来会省很多事,但是偏偏很多题就是考你不带头的,因为不带头结点的话要考虑得更多。

还可以有循环结构,即头尾相接,这样组合更多了,还可以有双向循环,实现起来当然复杂,但是对于使用者而言,会方便很多,正所谓,前人栽树,后人乘凉嘛。

关于链表的具体知识我也不赘述了,网上或者站内有太多太多详解了,我在这里只是做一个简单回顾。题目的话我有空会另外写博客,接下来我把我写的两个来链表贴一下吧,一个单向无头链表,一个双向无头链表,链表涉及到引用的修改操作,实现起来不算难但是细节非常多,所以还是要非常仔细的学习。

无头单向不循环链表

  1. public class MyLinkList {
  2. public int size;
  3. public ListNode head;
  4. //头插法
  5. public void addFirst(int val){
  6. ListNode newhead = new ListNode(val);
  7. newhead.next = this.head;
  8. this.head = newhead;
  9. this.size++;
  10. }
  11. // 尾插法
  12. public void addLast(int val){
  13. ListNode cur = this.head;
  14. if(cur == null) {
  15. cur = new ListNode(val);
  16. return;
  17. }
  18. while(cur.next != null){
  19. cur = cur.next;
  20. }
  21. cur.next = new ListNode(val);
  22. this.size++;
  23. }
  24. //任意位置插入,下标从0开始
  25. public boolean addIndex(int index,int val) {
  26. if (index > this.size){
  27. addLast(val);
  28. }else if(index == 0){
  29. addFirst(val);
  30. }else {
  31. int count = 1;
  32. ListNode cur = this.head;
  33. while (count < index) {
  34. cur = cur.next;
  35. }
  36. ListNode newnode = new ListNode(val);
  37. newnode.next = newnode.next;
  38. cur.next = newnode;
  39. }
  40. size++;
  41. return true;
  42. }
  43. //查找关键字key是否在单链表当中
  44. public boolean contains(int key){
  45. ListNode cur = this.head;
  46. while(cur != null){
  47. if(cur.getVal() == key){
  48. return true;
  49. }
  50. }
  51. return false;
  52. }
  53. //删除第一次出现key的节点
  54. public boolean remove(int key){
  55. ListNode cur = this.head;
  56. ListNode prev = cur;
  57. while(cur != null){
  58. if(cur.getVal() == key){
  59. break;
  60. }
  61. prev = cur;
  62. cur = cur.next;
  63. }
  64. if(cur == null)
  65. return false;
  66. if(cur == this.head){
  67. this.head = cur.next;
  68. cur.next = null;
  69. this.size--;
  70. return true;
  71. }
  72. if(cur.next == null){
  73. prev.next = null;
  74. this.size--;
  75. return true;
  76. }
  77. prev.next = cur.next;
  78. cur.next = null;
  79. this.size--;
  80. return true;
  81. }
  82. //删除所有值为key的节点
  83. public void removeAllKey(int key){
  84. while(remove(key));
  85. }
  86. //得到单链表的长度
  87. public int size(){
  88. return this.size;
  89. }
  90.     //打印单链表
  91. public void display(){
  92. ListNode cur = this.head;
  93. while(cur != null){
  94. System.out.print(cur.getVal());
  95. if(cur.next != null)
  96. System.out.print("->");
  97. cur = cur.next;
  98. }
  99. System.out.println();
  100. }
  101.     //清除单链表
  102. public void clear(){
  103. ListNode cur = this.head;
  104. this.head = null;
  105. while(cur != null){
  106. ListNode next = cur.next;
  107. cur.ne
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1001672
推荐阅读
相关标签
  

闽ICP备14008679号