การคัดลอกรหัสมีดังนี้:
-
* การใช้งานรายการที่เชื่อมโยงสองทาง
* @author ข้าม
* @version 1.0
-
ชั้นเรียนสาธารณะ Doublenodelist <T> {
// ระดับโหนด
โหนดคลาสสแตติกส่วนตัว <T> {
โหนด <t> perv; // โหนดด้านหน้า
โหนด <t> ถัดไป; // โหนดสุดท้าย
ข้อมูล; // ข้อมูล
โหนดสาธารณะ (T T) {
this.data = t;
-
-
โหนดส่วนตัว <T> head; // หัวโหนด
โหนดส่วนตัว <T> สุดท้าย; // โหนดหาง
โหนดส่วนตัว <T> อื่น ๆ ; // การดำเนินการชั่วคราวสำหรับการจัดเก็บโหนดสแตนด์บาย
ความยาว int ส่วนตัว; // ความยาวของรายการที่เชื่อมโยง
-
* โครงสร้างที่ไม่ใช่ glycopic
-
สาธารณะ doublenodelist () {
head = new node <t> (null);
สุดท้าย = หัว;
ความยาว = 0;
-
-
* สร้างโหนดในระหว่างการเริ่มต้น
* ข้อมูล @param
-
สาธารณะ doublenodelist (ข้อมูล t) {
head = new node <t> (ข้อมูล);
สุดท้าย = หัว;
ความยาว = 1;
-
-
* เพิ่มโหนด
* ข้อมูลเพิ่มข้อมูล @param
-
โมฆะสาธารณะเพิ่ม (ข้อมูล t) {
ถ้า (isempty ()) {
head = new node <t> (ข้อมูล);
สุดท้าย = หัว;
ความยาว ++;
}อื่น{
// วิธีการแทรกหาง
อื่น ๆ = โหนดใหม่ <T> (ข้อมูล);
อื่น ๆ . perv = สุดท้าย;
last.next = อื่น ๆ ;
สุดท้าย = อื่น ๆ ;
ความยาว ++;
-
-
-
* แทรกโหนดหลังจากระบุข้อมูล
* ข้อมูล @param ข้อมูลที่ระบุ
* @param insertData ข้อมูลแทรก
* @return ส่งคืนจริงหากการแทรกสำเร็จเท็จหากการแทรกไม่สำเร็จ
-
Public Boolean Addafert (t data, t insertData) {
อื่น ๆ = หัว;
ในขณะที่ (อื่น ๆ ! = 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 ส่งคืนจริงหากการแทรกสำเร็จเท็จหากการแทรกไม่สำเร็จ
-
บูลีนสาธารณะ addbefore (ข้อมูล t, t insertData) {
อื่น ๆ = หัว;
ในขณะที่ (อื่น ๆ ! = null) {
if (other.data.equals (data)) {
โหนด <t> t = โหนดใหม่ <T> (insertData);
t.perv = อื่น ๆ
t.next = อื่น ๆ ;
อื่น ๆ . perv.next = t;
ความยาว ++;
กลับมาจริง;
-
อื่น ๆ = อื่น ๆ next;
-
กลับเท็จ;
-
-
* รับข้อมูลที่ดัชนี
* ดัชนีดัชนี @param
* @return data
-
สาธารณะ T ได้รับ (INT ดัชนี) {
ถ้า (ดัชนี> ความยาว || ดัชนี <0) {
โยน indexoutofboundsexception ใหม่ ("ดัชนี:"+ดัชนี);
-
อื่น ๆ = หัว;
สำหรับ (int i = 0; i <index; i ++) {
อื่น ๆ = อื่น ๆ next;
-
กลับอื่น ๆ data;
-
-
* ค่าใหม่แทนที่ค่าเก่า
* @return ความสำเร็จเป็นจริงไม่พบว่าเป็นเท็จ
-
ชุดบูลีนสาธารณะ (t oldValue, t newValue) {
อื่น ๆ = หัว;
ในขณะที่ (อื่น ๆ ! = null) {
ถ้า (อื่น ๆ data.equals (oldValue)) {
อื่น ๆ data = newValue;
กลับมาจริง;
-
อื่น ๆ = อื่น ๆ next;
-
กลับเท็จ;
-
-
* ลบองค์ประกอบที่ระบุ
* องค์ประกอบข้อมูล @param ที่จำเป็นต้องลบ
* @return ไม่มีอยู่จริงและเป็นจริงเพื่อความสำเร็จ
-
บูลีนสาธารณะลบ (t ข้อมูล) {
อื่น ๆ = หัว;
ในขณะที่ (อื่น ๆ ! = null) {
if (other.data.equals (data)) {
other.perv.next = อื่น ๆ next;
ความยาว--;
กลับมาจริง;
-
อื่น ๆ = อื่น ๆ next;
-
กลับเท็จ;
-
-
* ไม่ว่าองค์ประกอบนี้จะรวมอยู่ในรายการที่เชื่อมโยงหรือไม่
* @return รวมเป็นจริงไม่ใช่เท็จ
-
บูลีนสาธารณะมี (ข้อมูล t) {
อื่น ๆ = หัว;
ในขณะที่ (อื่น ๆ ! = null) {
if (other.data.equals (data)) {
กลับมาจริง;
-
อื่น ๆ = อื่น ๆ next;
-
กลับเท็จ;
-
-
* รับข้อมูลของโหนดสุดท้าย
* @return data ของโหนดสุดท้าย
-
สาธารณะ t getLast () {
return last.data;
-
-
* รับข้อมูลของโหนดแรก
* @return ข้อมูลของโหนดแรก
-
สาธารณะ t getFirst () {
return head.data;
-
-
* รับความยาวของรายการที่เชื่อมโยง
* @return ความยาว
-
public int getsize () {
ความยาวคืน;
-
-
* เป็นตารางลิงก์ที่ว่างเปล่า
* @return รายการว่างเป็นจริงและรายการที่ไม่ว่างเปล่าเป็นเท็จ
-
บูลีนสาธารณะ isempty () {
ความยาวคืน == 0;
-
-
* ล้างรายการลิงค์
-
โมฆะสาธารณะ Clear () {
head = null;
ความยาว = 0;
-
-
* เอาต์พุตโหนดทั้งหมดในรายการที่เชื่อมโยง
-
Public Void Printlist () {
ถ้า (isempty ()) {
System.out.println ("รายการที่เชื่อมโยงเปล่า");
}อื่น{
อื่น ๆ = หัว;
สำหรับ (int i = 0; i <length; i ++) {
System.out.print (อื่น ๆ data+"");
อื่น ๆ = อื่น ๆ next;
-
System.out.println ();
-
-
-