코드 사본은 다음과 같습니다.
/**
* 양방향 링크 목록 구현
* @author skip
* @version 1.0
*/
공개 클래스 Doublenodelist <t> {
// 노드 클래스
개인 정적 클래스 노드 <T> {
노드 <t> perv; // 전면 노드
노드 <T> 다음; // 마지막 노드
t 데이터; // 데이터
공개 노드 (t t) {
this.data = t;
}
}
개인 노드 <T> 헤드; // 헤드 노드
개인 노드 <T> 마지막; // 꼬리 노드
개인 노드 <T> 기타; // 대기 노드 저장을위한 임시 작업
비공개 int 길이; // 링크 된 목록의 길이
/**
* 비 후생 구조
*/
public doublenodelist () {
head = new Node <t> (null);
마지막 = 머리;
길이 = 0;
}
/**
* 초기화 중에 노드를 만듭니다
* @param 데이터
*/
public doublenodelist (t data) {
head = new Node <t> (데이터);
마지막 = 머리;
길이 = 1;
}
/**
* 노드를 추가하십시오
* @param 데이터가 추가되었습니다
*/
public void add (t data) {
if (isempty ()) {
head = new Node <t> (데이터);
마지막 = 머리;
길이 ++;
}또 다른{
// 꼬리 삽입 방법
기타 = 새로운 노드 <t> (데이터);
기타 .perv = 마지막;
last.next = 기타;
마지막 = 기타;
길이 ++;
}
}
/**
* 데이터를 지정한 후 노드를 삽입하십시오
* @param 데이터 지정된 데이터
* @param insertData 삽입 데이터
* @return 삽입이 성공하면 삽입이 실패하면 거짓으로 반환됩니다.
*/
Public Boolean Addafert (t data, t insertData) {
기타 = 머리;
while (기타! = null) {
if (Other.data.equals (data)) {
노드 <t> t = 새로운 노드 <t> (insertData);
t.perv = 기타;
t.next = 기타 .next;
기타 .next = t;
// 마지막 노드 후 노드를 추가할지 판단합니다
if (t.next == null) {
마지막 = t;
}
길이 ++;
진실을 반환하십시오.
}
기타 = 기타 .next;
}
거짓을 반환합니다.
}
/**
* 데이터를 지정하기 전에 노드를 삽입하십시오
* @param 데이터 지정된 데이터
* @param insertData 삽입 데이터
* @return 삽입이 성공하면 삽입이 실패하면 거짓으로 반환됩니다.
*/
공개 부울 추가 (t data, t insertData) {
기타 = 머리;
while (기타! = null) {
if (Other.data.equals (data)) {
노드 <t> t = 새로운 노드 <t> (insertData);
t.perv = 기타 .perv;
t.next = 기타;
기타 .perv.next = t;
길이 ++;
진실을 반환하십시오.
}
기타 = 기타 .next;
}
거짓을 반환합니다.
}
/**
* 인덱스에서 데이터를 가져옵니다
* @Param 인덱스 인덱스
* @return 데이터
*/
public t get (int index) {
if (index> length || index <0) {
새로운 indexOutOfBoundSexection을 던지십시오 ( "index :"+index);
}
기타 = 머리;
for (int i = 0; i <index; i ++) {
기타 = 기타 .next;
}
다른 반환 .data;
}
/**
* 새 값은 오래된 값을 대체합니다
* @return 성공은 사실이며 거짓으로 발견되지 않았습니다
*/
공개 부울 세트 (t OldValue, t NewValue) {
기타 = 머리;
while (기타! = null) {
if (Other.data.equals (OldValue)) {
기타 .Data = NewValue;
진실을 반환하십시오.
}
기타 = 기타 .next;
}
거짓을 반환합니다.
}
/**
* 지정된 요소를 제거합니다
* 제거 해야하는 @Param 데이터 요소
* @return은 존재하지 않으며 성공을 위해 참입니다.
*/
공개 부울 제거 (t data) {
기타 = 머리;
while (기타! = null) {
if (Other.data.equals (data)) {
기타 .perv.next = 기타 .next;
길이--;
진실을 반환하십시오.
}
기타 = 기타 .next;
}
거짓을 반환합니다.
}
/**
*이 요소가 링크 된 목록에 포함되어 있는지 여부
* @return은 거짓이 아닌 참으로 포함되었습니다
*/
공개 부울은 (t data) {
기타 = 머리;
while (기타! = null) {
if (Other.data.equals (data)) {
진실을 반환하십시오.
}
기타 = 기타 .next;
}
거짓을 반환합니다.
}
/**
* 마지막 노드의 데이터를 가져옵니다
* 마지막 노드의 @return 데이터
*/
public t getLast () {
마지막으로 반환 .data;
}
/**
* 첫 번째 노드의 데이터를 얻습니다
* @첫 번째 노드의 데이터를 retern
*/
public t getfirst () {
return head.data;
}
/**
* 링크 된 목록의 길이를 가져옵니다
* @return 길이
*/
public int getsize () {
반환 길이;
}
/**
* 빈 링크 테이블입니다
* @return 빈 목록은 사실이며, 비어 있지 않은 목록은 거짓입니다.
*/
공개 부울 isempty () {
반환 길이 == 0;
}
/**
* 링크 목록을 지 웁니다
*/
public void clear () {
머리 = null;
길이 = 0;
}
/**
* 링크 된 목록의 모든 노드를 출력합니다
*/
public void printlist () {
if (isempty ()) {
System.out.println ( "빈 링크 목록");
}또 다른{
기타 = 머리;
for (int i = 0; i <길이; i ++) {
System.out.print (Other.data+"");
기타 = 기타 .next;
}
System.out.println ();
}
}
}