//一般设置节点时用到prev就是等于dummyHead!!!!!// 用到prev的有add、remove相关方法// 在链表的index(0-based)位置添加新的元素e// 在链表中不是一个常用的操作,练习用:)publicvoidadd(int index, E e){if(index <0|| index > size)thrownewIllegalArgumentException("index is error");
Node prev = dummyHead;for(int i =0; i < index ; i ++)
prev=prev.next;
prev.next=newNode(e,prev.next);
size++;}
3
//一般设置节点时用到cur就是等于dummyHead.next!!!!!// 用到cur的有get、set相关方法// 获得链表的第index(0-based)个位置的元素// 在链表中不是一个常用的操作,练习用:)public E get(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Get failed. Illegal index.");
Node cur = dummyHead.next;for(int i =0; i < index ; i ++)
cur=cur.next;return cur.e;}
源代码
package com.Stack;publicclassLinkedList<E>{privateclassNode{public E e;public Node next;publicNode(E e, Node next){this.e = e;this.next = next;}publicNode(E e){this(e, null);}publicNode(){this(null, null);}@Overridepublic String toString(){return e.toString();}}private Node dummyHead;privateint size;publicLinkedList(){
dummyHead =newNode();}// 获取链表中的元素个数publicintgetSize(){return size;}// 返回链表是否为空publicbooleanisEmpty(){return size ==0;}// 在链表的index(0-based)位置添加新的元素e// 在链表中不是一个常用的操作,练习用:)publicvoidadd(int index, E e){if(index <0|| index > size)thrownewIllegalArgumentException("index is error");
Node prev = dummyHead;for(int i =0; i < index ; i ++)
prev=prev.next;
prev.next=newNode(e,prev.next);
size++;}// 在链表头添加新的元素epublicvoidaddFirst(E e){add(0,e);}// 在链表末尾添加新的元素epublicvoidaddLast(E e){add(size,e);}// 获得链表的第index(0-based)个位置的元素// 在链表中不是一个常用的操作,练习用:)public E get(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Get failed. Illegal index.");
Node cur = dummyHead.next;for(int i =0; i < index ; i ++)
cur=cur.next;return cur.e;}// 获得链表的第一个元素public E getFirst(){returnget(0);}// 获得链表的最后一个元素public E getLast(){returnget(size-1);}// 修改链表的第index(0-based)个位置的元素为e// 在链表中不是一个常用的操作,练习用:)publicvoidset(int index, E e){if(index <0|| index >= size)thrownewIllegalArgumentException("set failed. Illegal index.");
Node cur = dummyHead.next;for(int i =0; i < index ; i ++)
cur= cur.next;
cur.e=e;}// 查找链表中是否有元素epublicbooleancontains(E e){
Node cur = dummyHead.next;while(cur.next!=null){if(cur.e.equals(e))returntrue;
cur=cur.next;}returnfalse;}// 从链表中删除index(0-based)位置的元素, 返回删除的元素// 在链表中不是一个常用的操作,练习用:)public E remove(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Remove failed. Illegal index.");
Node prev =dummyHead;for(int i =0; i < index ; i ++)
prev=prev.next;
Node temp = prev.next;
prev.next=prev.next.next;
temp.next=null;
size--;return temp.e;}// 从链表中删除第一个元素, 返回删除的元素public E removeFirst(){returnremove(0);}// 从链表中删除最后一个元素, 返回删除的元素public E removeLast(){returnremove(size-1);}// 从链表中删除元素epublicvoidremoveElement(E e){
Node prev = dummyHead;while(prev.next!=null){if(prev.next.e.equals(e))break;
prev=prev.next;}if(prev.next!=null){
Node temp = prev.next;
prev.next = prev.next.next;
temp.next =null;
size--;}}@Overridepublic String toString(){
StringBuilder res =newStringBuilder();
res.append("LinkedList : ");
Node cur = dummyHead.next;while(cur !=null){
res.append(cur.e +"->");
cur=cur.next;}
res.append("null");return res.toString();}}
测试用例主函数
publicclassMain{publicstaticvoidmain(String[] args){
LinkedList<Integer> list =newLinkedList<>();for(int i =0; i <6; i++){
list.addLast(i);
System.out.println(list);}
list.removeFirst();
System.out.println(list);}}
结果
"C:\Program Files\Java\jdk14\bin\java.exe""-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.2\lib\idea_rt.jar=57507:C:\Program Files\JetBrains\IntelliJ IDEA 2020.2\bin"-Dfile.encoding=UTF-8-classpath C:\Users\12778\IdeaProjects\first\out\production\Array com.LinkedList.Main
0->null
0->1->null
0->1->2->null
0->1->2->3->null
0->1->2->3->4->null
0->1->2->3->4->5->null
1->2->3->4->5->null
进程已结束,退出代码0