当前位置:   article > 正文

LinkedList

LinkedList

一.模拟实现

  1. public class MyLinkedList {
  2. static class ListNode {
  3. private int val;
  4. private ListNode prev;//前驱
  5. private ListNode next;//后继
  6. public ListNode(int val) {
  7. this.val = val;
  8. }
  9. }
  10. public ListNode head;//双向链表的头节点
  11. public ListNode last;//双向链表的尾巴
  12. //得到链表的长度
  13. public int size(){
  14. ListNode cur = head;
  15. int num = 0;
  16. while (cur != null){
  17. cur = cur.next;
  18. num++;
  19. }
  20. return num;
  21. }
  22. public void display(){
  23. ListNode cur = head;
  24. while(cur != null){
  25. System.out.print(cur.val+" ");
  26. cur = cur.next;
  27. }
  28. System.out.println();
  29. }
  30. //查找是否包含关键字key是否在链表当中
  31. public boolean contains(int key){
  32. ListNode cur = head;
  33. while (cur != null){
  34. if (cur.val == key){
  35. return true;
  36. }
  37. cur = cur.next;
  38. }
  39. return false;
  40. }
  41. //头插法
  42. public void addFirst(int data){
  43. ListNode cur = new ListNode(data);
  44. if (head == null){
  45. head = cur;
  46. last = cur;
  47. }else {
  48. cur.next = head;
  49. head.prev = cur;
  50. head = cur;
  51. }
  52. }
  53. //尾插法
  54. public void addLast(int data){
  55. ListNode cur = new ListNode(data);
  56. if (head == null){
  57. head = cur;
  58. last = cur;
  59. }else {
  60. last.next = cur;
  61. cur.prev = last;
  62. last = cur;
  63. }
  64. }
  65. //任意位置插入,第一个数据节点为0号下标
  66. public void addIndex(int index,int data) {
  67. if (index == 0) {
  68. addFirst(index);
  69. } else if (index == size()) {
  70. addLast(data);
  71. } else {
  72. ListNode node = new ListNode(data);
  73. ListNode sea = searchIndex(index);
  74. node.next = sea;
  75. node.prev = sea.prev;
  76. sea.prev = node;
  77. node.prev.next = node;
  78. }
  79. }
  80. private ListNode searchIndex(int index) {
  81. ListNode cur = head;
  82. if (index < 0 || index >= size()){
  83. System.out.println("位置不合法");
  84. return null;
  85. }
  86. for (int i = 0; i < index; i++) {
  87. cur = cur.next;
  88. }
  89. return cur;
  90. }
  91. private void checkIndex(int index) {
  92. }
  93. //删除第一次出现关键字为key的节点
  94. public void remove(int key){
  95. ListNode node = head;
  96. while (node != null){
  97. if (head.val == key){
  98. head = head.next;
  99. if (head != null) {
  100. head.prev = null;
  101. }else {
  102. last = null;
  103. }
  104. return;
  105. }else if (node.next == null && last.val == key){
  106. last = last.prev;
  107. last.next = null;
  108. return;
  109. }else if (node.val == key){
  110. node.prev.next = node.next;
  111. node.next.prev = node.prev;
  112. return;
  113. }
  114. node = node.next;
  115. }
  116. System.out.println("没有这个");
  117. }
  118. //删除所有值为key的节点
  119. public void removeAllKey(int key){
  120. ListNode node = head;
  121. while (node != null){
  122. if (head.val == key){
  123. head = head.next;
  124. if (head != null) {
  125. head.prev = null;
  126. }else {
  127. last = null;
  128. }
  129. }else if (node.next == null && last.val == key){
  130. last = last.prev;
  131. last.next = null;
  132. }else if (node.val == key){
  133. node.prev.next = node.next;
  134. node.next.prev = node.prev;
  135. }
  136. node = node.next;
  137. }
  138. }
  139. public void clear(){
  140. head = null;
  141. last = null;
  142. }
  143. public static void main(String[] args) {
  144. MyLinkedList myLinkedList = new MyLinkedList();
  145. myLinkedList.addFirst(1);
  146. myLinkedList.display();
  147. myLinkedList.addLast(3);
  148. myLinkedList.display();
  149. System.out.println(myLinkedList.size());
  150. System.out.println(myLinkedList.contains(2));
  151. System.out.println(myLinkedList.contains(99));
  152. myLinkedList.addIndex(1, 2);
  153. myLinkedList.display();
  154. myLinkedList.remove(2);
  155. myLinkedList.display();
  156. myLinkedList.addLast(4);
  157. myLinkedList.addLast(5);
  158. myLinkedList.addLast(6);
  159. myLinkedList.addLast(6);
  160. myLinkedList.addLast(7);
  161. myLinkedList.display();
  162. myLinkedList.remove(1);
  163. myLinkedList.display();
  164. myLinkedList.removeAllKey(6);
  165. myLinkedList.display();
  166. myLinkedList.clear();
  167. myLinkedList.addFirst(1);
  168. myLinkedList.addFirst(1);
  169. myLinkedList.addFirst(1);
  170. myLinkedList.addFirst(1);
  171. myLinkedList.addFirst(1);
  172. myLinkedList.addFirst(1);
  173. myLinkedList.addFirst(1);
  174. myLinkedList.addFirst(1);
  175. myLinkedList.addFirst(1);
  176. myLinkedList.addFirst(2);
  177. myLinkedList.display();
  178. myLinkedList.remove(1);
  179. myLinkedList.display();
  180. myLinkedList.addLast(2);
  181. myLinkedList.display();
  182. myLinkedList.remove(2);
  183. myLinkedList.display();
  184. myLinkedList.addFirst(2);
  185. myLinkedList.display();
  186. myLinkedList.remove(2);
  187. myLinkedList.display();
  188. myLinkedList.addFirst(3);
  189. myLinkedList.addFirst(2);
  190. myLinkedList.addLast(3);
  191. myLinkedList.display();
  192. myLinkedList.remove(3);
  193. myLinkedList.display();
  194. myLinkedList.removeAllKey(1);
  195. myLinkedList.display();
  196. myLinkedList.clear();
  197. myLinkedList.display();
  198. System.out.println(1);
  199. }
  200. }

二.LinkedList的使用

1.LinkedList的构造

  1. public class MyLinkedList {
  2. public static void main(String[] args) {
  3. //构造一个空的LinkedList
  4. List<Integer>list1 = new LinkedList<>();
  5. List<String>list2 = new java.util.ArrayList<>();
  6. list2.add("haha");
  7. list2.add("hehe");
  8. //使用ArrayList构造LinkedList
  9. List<String>list3 = new LinkedList<>(list2);
  10. }
  11. }

2.LinkedList的其他常用方法

三.ArrayList和LinkedList的区别

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

闽ICP备14008679号