// MyList.java in the packagepublicinterfaceMyList<T>{voidpush(T element);//向链表中添加元素 @param element 待添加的元素booleancontains(T element);//链表中是否存在指定元素booleanpop(T element);//删除指定元素 @param element 待删除待元素 //@return 删除是否成功,如果元素不在链表中,返回 falseintsize();//返回链表⻓度voidreverse();//反转链表,如 1->2->3->4 反转后是 4->3->2->1//void sort(Comparator<? super T> comparator); 选做,链表排序}
publicclassMain<T>implementsMyList<T>{privatestaticclassNode<T>{privateT data;privateNode<T> next;publicNode(T data){this.data = data;}publicNode<T>getNext(){return next;}publicvoidsetNext(Node<T> next){this.next = next;}publicTgetData(){return data;}publicvoidsetData(T data){this.data = data;}}privateint size;// 链表长度privateNode<T> head;// 头节点Main(){ size =0; head =null;}@Override//向链表中添加元素,element为待添加的元素publicvoidpush(T element){Node<T> newNode =newNode<>(element);if(head ==null){
head = newNode;}else{Node<T> temp = head;while(temp.next !=null){
temp = temp.next;}
temp.next = newNode;}++size;//链表长度加1}@Override//查找链表中是否存在指定元素publicbooleancontains(T element){Node<T> p = head;// 定义链表查找指针while(p !=null){if(p.data == element){returntrue;// 成功找到该元素,返回true}else{
p = p.next;}}returnfalse;}@Override// 删除指定的元素;删除成功返回true,没找到元素返回falsepublicbooleanpop(T element){if(head.data == element){// 如果待删除元素在头节点中
head = head.next;// 让头节点的下一个节点做头节点(删除头节点)--size;returntrue;}else{// 如果待删除元素不在头节点中Node<T> p = head;// 定义链表查找指针while(p.next !=null){if(p.next.data == element){
p.next = p.next.next;--size;returntrue;}else{
p = p.next;}}returnfalse;}}@Overridepublicintsize(){return size;}@Overridepublicvoidreverse(){if(head ==null|| head.getNext()==null)return;//return head;Node<T> pre = head;Node<T> cur = head.getNext();Node<T> tmp;while(cur !=null){
tmp = cur.getNext();
cur.setNext(pre);
pre = cur;
cur = tmp;}
head.setNext(null);
head = pre;}// 测试int型数据的main函数publicstaticvoidmain(String[] args){Main<Integer> a =newMain<>();Node<Integer> p =null;System.out.println("\t测试size()方法");System.out.println("Size = "+ a.size());System.out.println("\t测试push()方法");
a.push(1); a.push(2); a.push(3); a.push(4); a.push(5);System.out.println("Size = "+ a.size());
p = a.head;while(p !=null){System.out.print(p.getData()+"\t");
p = p.next;}System.out.println("\n\t测试contains()方法");if(a.contains(3))System.out.println("链表中存在元素3");elseSystem.out.println("链表中不存在元素3");if(a.contains(8))System.out.println("链表中存在元素8");elseSystem.out.println("链表中不存在元素8");System.out.println("\t测试pop()方法");if(a.pop(6))System.out.println("链表删除了元素6");elseSystem.out.println("链表中不含有元素6,删除失败(待删除元素不在链表中)");System.out.println("Size = "+ a.size());if(a.pop(1))System.out.println("链表删除了元素1(待删除元素在头节点)");elseSystem.out.println("链表中不含有元素1");System.out.println("Size = "+ a.size());if(a.pop(4))System.out.println("链表删除了元素4(待删除元素不在头节点)");elseSystem.out.println("链表中不含有元素4");System.out.println("Size = "+ a.size());
p = a.head;while(p !=null){System.out.print(p.getData()+"\t");
p = p.next;}System.out.println("\n\t测试reverse()方法");
a.reverse();// 反转链表
p = a.head;while(p !=null){System.out.print(p.getData()+"\t");
p = p.next;}}}
运行结果:
测试size()方法
Size=0
测试push()方法
Size=512345
测试contains()方法
链表中存在元素3
链表中不存在元素8
测试pop()方法
链表中不含有元素6,删除失败(待删除元素不在链表中)Size=5
链表删除了元素1(待删除元素在头节点)Size=4
链表删除了元素4(待删除元素不在头节点)Size=3235
测试reverse()方法
532