单链表的实现
1.接口
package Test.DS.LinkedList;
public interface ILinked {
void addFirst(int data);
void addLast(int data);
void addIndex(int index, int data);
boolean contains(Object data);
Object remove(int index);
void removeAllKey(Object key);
Object get(int index);
Object set(int index, Object newData);
int getLength();
void display();
}
2.实现类
package Test.DS.LinkedList;
public class LinkedListImpl implements ILinked {
private Node dummyHead;
private int size;
private class Node{
private Object date;
private Node next;
public Node(Object date) {
this.date = date;
}
public Node(Object date, Node next) {
this.date = date;
this.next = next;
}
}
public LinkedListImpl() {
dummyHead=new Node(null,null);
}
@Override
public void addFirst(int data) {
addIndex(0,data);
}
@Override
public void addLast(int data) {
addIndex(size,data);
}
@Override
public void addIndex(int index, int data) {
rangCheck(index);
Node prev = dummyHead;
for(int i=0;i<index;i++){
prev=prev.next;
}
Node newNode = new Node(data,prev.next);
prev.next=newNode;
size++;
}
@Override
public boolean contains(Object data) {
if(data==null){
for(Node prev =dummyHead.next;prev!=null;prev=prev.next){
if(prev.date==null){
return true;
}
}
}else {
for(Node prev =dummyHead.next;prev!=null;prev=prev.next){
if (prev.date.equals(data)){
return true;
}
}
}
return false;
}
@Override
public Object remove(int index) {
rangCheck(index);
Node prev= dummyHead;
Object oldData=node(index).date;
for(int i=0;i<index;i++){
prev=prev.next;
}
prev.next=prev.next.next;
size--;
return oldData;
}
@Override
public void removeAllKey(Object key) {
Node prev =dummyHead;
while (prev.next!=null){
if (prev.next.date==key){
prev.next=prev.next.next;
size--;
}else {
prev=prev.next;
}
}
}
@Override
public Object get(int index) {
return node(index).date;
}
@Override
public Object set(int index, Object newData) {
rangCheck(index);
Object oldData =node(index).date;
node(index).date=newData;
return oldData;
}
@Override
public int getLength() {
return size;
}
@Override
public void display() {
for(int i=0;i<size;i++){
System.out.print(node(i).date);
}
System.out.println();
}
private Node node(int index){
rangCheck(index);
Node prev = dummyHead.next;
for(int i=0;i<index;i++){
prev=prev.next;
}
return prev;
}
private void rangCheck(int index) {
if(index<0||index>size){
throw new IndexOutOfBoundsException("下标不合法");
}
}
}
3. 测试类
package Test.DS.LinkedList;
public class TestDemo {
public static void main(String[] args) {
ILinked iLinked = new LinkedListImpl();
iLinked.addLast(1);
iLinked.addLast(1);
iLinked.addLast(4);
iLinked.addLast(1);
iLinked.addLast(8);
iLinked.addLast(1);
iLinked.addLast(1);
iLinked.display();
iLinked.removeAllKey(1);
iLinked.display();
}
}