赞
踩
class Node{ public int data; public Node next; public Node(int data){ this.data=data; } } public class MyLinkedList{ public Node head; public void addFirst(int data){ Node node=new node(data); //判断是否是空链表 if(this.head==null){ this.head=node; }else{ node.next=this.head; this.head=node; } } public void addLast(int data){ Node node=new Node(data); //判断是否是空链表 if(this.head==null){ this.head=node; }else{ Node cur=this.head; while(cur.next!=null){ cur=cur.next; } cur.next=node; } } public void display(){ //判断是否为空 if(this.head==null){ System.out.pintln("空链表"); return; } Node cur=this.head; while(cur!=null){ System.out.print(cur.data+" "); cur=cur.next; } } public boolean contains(int data){ Node cur=this.head; while(cur!=null){ if(cur.data==data){ return true; } cur=cur.next; } return false; } public int size(){ int count=0; Node cur=this.head; while(cur!=null){ count++; cur=cur.next; } return count; } public void addIndex(int index,int data){ if(index==0){ //如果插入的位置是第一个那就是头插 addFirst(data); }else if(index==size()){ //如果插入的位置是最后一个那就是尾插 addLast(data); }else{ //找到要插入位置的前一个节点 Node cur=searchIndex(index); Node node=new Node(data); node.next=cur.next; cur.next=node; } private Node searchIndex(int index){ if(index<0||index>size(){ //插入位置不合法 throw new RuntimeException("index位置不合法"); } //找到需要插入的位置的前一个位置 Node cur=this.head; for(int i=0;i<index-1;i++){ cur=cur.next; } return cur; } public void remove(int data){ //如果是空链表 if(this.head==null){ System.out.println("空链表无法删除"); return; } //如果要删除的是头节点 if(this.head.data==data){ this.head=this.head.next; return; } //找到要删除节点的前一个 Node cur=searchPrev(data); if(cur!=null){ cur.next=cur.next.next; }else{ System.out.println("找不到该节点"); } } private Node searchPrev(int data){ Node cur=this.head; while(cur.next!=null){ //找到要删除节点的前一个节点 if(cur.next.data==data){ return cur; } cur=cur.next; } return null; } pubic void removeAllKey(int data){ //删除所有值为data的节点 //如果是空链表 if(this.head==null){ System.out.println("空链表无法删除"); return; } //先判断除head以外的节点 Node prev=this.head; Node cur=prev.next; while(cur!=null){ if(cur.data==data){ prev.next=cur.next; cur=cur.next; }else{ //如果有连续相同的cur,先删除再移动prev prev=cur; cur=cur.next; } } //如果要删除的是头节点 if(this.head.data==data){ this.head=this.head.next; } } public void clear(){ //写该函数是为了防止内存泄露 this.head=null; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。