자바 범 형 실현 의 양 방향 링크
링크 및 관련 함수 구현
자바 가 실현 하 는 일반 양 방향 링크 는 참고 할 수 있 습 니 다.
자바 가 실현 한 양 방향 링크 링크
일반적인 도입 이 있 으 면 Object 류 가 아래로 전환 할 때 매개 변수 문 제 를 해결 하고 아래로 전환 할 때 ClassCastException 이 코드 를 이상 하 게 보지 않도록 할 수 있 습 니 다.
package test;
/*
*
* */
interface Link {
//
void init();
//
void add(T t);
// index
boolean remove(int index);
//
boolean contain(T t);
//
int indexOf(T t);
//
boolean set(int index, T t);
//
T get(int index);
//
int length();
//
void clean();
//
T[] toArray();
//
void printLink();
}
class LinkImpl implements Link {
private Node first;
private Node last;
private Integer size;
//
private class Node {
public Node(T data) {
this.data = data;
}
Node next ;
Node prev ;
T data;
}
@Override
public void init() {
// TODO Auto-generated method stub
this.last = this.first = null;
this.size = 0;
}
@Override
public void add(T t) {
// TODO Auto-generated method stub
//
Node newnode = new Node(t);
//
if(this.size == 0) {
this.first = newnode;
this.last = newnode;
newnode.next = null;
newnode.prev = null;
this.size++;
} else {
//
//
Node tmp = this.last;
//
tmp.next = newnode;
newnode.prev = tmp;
//
this.last = newnode;
newnode.next = null;
this.size++;
}
}
@Override
public boolean remove(int index) {
// TODO Auto-generated method stub
//
if(this.size == 0) {
return false;
} else if(index>=this.size || index<0) {
// index
return false;
} else if(this.last == this.first) {
//
this.first = this.last = null;
this.size = 0;
} else if(index == 0) {
//
this.first = this.first.next;
this.size--;
} else if(index == this.size-1) {
//
this.last = this.last.prev;
this.size--;
} else {
//
// index
Node cur = this.first;
for( int i = 0; i <= index; i++) {
cur = cur.next;
}
cur.prev.next = cur.next;
cur.next.prev = cur.prev;
this.size--;
}
return true;
}
@Override
public boolean contain(T t) {
// TODO Auto-generated method stub
//
Node cur = this.first;
for( int i = 0; i < this.size; i++) {
if(cur.data == t) {
return true;
}
cur = cur.next;
}
return false;
}
@Override
public int indexOf(T t) {
// TODO Auto-generated method stub
//
Node cur = this.first;
int i = 0;
for( ; i < this.size; i++) {
if(cur.data == t) {
return i;
}
cur = cur.next;
}
return -1;
}
@Override
public boolean set(int index, T t) {
// TODO Auto-generated method stub
// index
if(index >= this.size) {
return false;
}
//
Node cur = this.first;
for(int i = 0; i <= index; i++) {
cur = cur.next;
}
cur.data = t;
return true;
}
@Override
public T get(int index) {
// TODO Auto-generated method stub
// index
if(index >= this.size) {
System.out.println("index ");
}
//
Node cur = this.first;
for(int i = 0; i <= index; i++) {
cur = cur.next;
}
return cur.data;
}
@Override
public int length() {
// TODO Auto-generated method stub
return this.size;
}
@Override
public void clean() {
// TODO Auto-generated method stub
this.first = this.last = null;
this.size = 0;
}
@Override
public T[] toArray() {
// TODO Auto-generated method stub
Object[] arr = new Object[this.size];
@SuppressWarnings("unchecked")
T[] data = (T[])arr;
Node cur = this.first;
for(int i = 0; i < this.size; i++) {
data[i] = cur.data;
cur = cur.next;
}
return data;
}
@Override
public void printLink() {
// TODO Auto-generated method stub
Node cur = this.first;
for(int i = 0; i < this.size; i++) {
System.out.println(cur.data);
cur = cur.next;
}
}
}
//
class Factory {
private Factory() {}
public static LinkImpl getInstance() {
return new LinkImpl();
}
}
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkImpl link = Factory.getInstance();
link.init();
//
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 범 형 실현 의 양 방향 링크데이터 구조 링크 에 대한 상세 한 설명 은 이동 하 십시오. 링크 및 관련 함수 구현 자바 가 실현 하 는 일반 양 방향 링크 는 참고 할 수 있 습 니 다. 자바 가 실현 한 양 방향 링크 링크 일반적인 도입 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.