نسخة الكود كما يلي:
/**
* تنفيذ القوائم المرتبطة ثنائية الاتجاه
* Author تخطي
* version 1.0
*/
الطبقة العامة doublenodelist <T> {
// فئة العقدة
عقدة فئة ثابتة خاصة <T> {
العقدة <T> perv ؛ // العقدة الأمامية
العقدة <T> التالية ؛ // الأخيرة العقدة
T البيانات ؛ // البيانات
العقدة العامة (t t) {
this.data = t ؛
}
}
العقدة الخاصة <T> الرأس ؛ // رأس العقدة
العقدة الخاصة <T> الأخيرة ؛ // عقدة الذيل
العقدة الخاصة <T> أخرى ؛ // التشغيل المؤقت لتخزين العقد الاستعداد
طول الباحث الخاص ؛ // طول القائمة المرتبطة
/**
* بنية غير شبكية
*/
doublenodelist العامة () {
HEAD = NED NODE <T> (NULL) ؛
الأخير = الرأس ؛
الطول = 0 ؛
}
/**
* إنشاء عقدة أثناء التهيئة
* param بيانات
*/
doublenodelist العامة (T Data) {
رأس = عقدة جديدة <T> (البيانات) ؛
الأخير = الرأس ؛
الطول = 1 ؛
}
/**
* أضف عقدة
* param البيانات المضافة البيانات
*/
void public add (t data) {
if (isempty ()) {
رأس = عقدة جديدة <T> (البيانات) ؛
الأخير = الرأس ؛
طول ++ ؛
}آخر{
// طريقة إدراج الذيل
أخرى = عقدة جديدة <T> (البيانات) ؛
other.perv = last ؛
last.next = آخر ؛
آخر = آخر ؛
طول ++ ؛
}
}
/**
* أدخل عقدة بعد تحديد البيانات
* param بيانات البيانات المحددة
* param insertdata إدراج البيانات
* return return true إذا كان الإدراج ناجحًا ، خطأ إذا لم ينجح الإدراج.
*/
addafert المنطقية العامة (T Data ، T insertdata) {
الآخر = الرأس ؛
بينما (آخر! = فارغ) {
if (other.data.equals (data)) {
العقدة <T> t = node node <t> (inSertData) ؛
t.perv = آخر ؛
t.next = other.next ؛
other.next = t ؛
// احكم على ما إذا كنت تريد إضافة عقد بعد العقدة الأخيرة
if (t.next == null) {
الماضي = ر ؛
}
طول ++ ؛
العودة صحيح.
}
أخرى = other.next ؛
}
العودة كاذبة
}
/**
* أدخل عقدة قبل تحديد البيانات
* param بيانات البيانات المحددة
* param insertdata إدراج البيانات
* return return true إذا كان الإدراج ناجحًا ، خطأ إذا لم ينجح الإدراج.
*/
Addbefore المنطقي العام (T Data ، T insertdata) {
الآخر = الرأس ؛
بينما (آخر! = فارغ) {
if (other.data.equals (data)) {
العقدة <T> t = node node <t> (inSertData) ؛
t.perv = other.perv ؛
T.Next = آخر ؛
other.perv.next = t ؛
طول ++ ؛
العودة صحيح.
}
أخرى = other.next ؛
}
العودة كاذبة
}
/**
* احصل على البيانات في الفهرس
* فهرس فهرس param
* بيانات العودة
*/
العام t get (int index) {
if (index> length || index <0) {
رمي indexoutofboundsexception ("الفهرس:"+فهرس) ؛
}
الآخر = الرأس ؛
لـ (int i = 0 ؛ i <index ؛ i ++) {
أخرى = other.next ؛
}
إرجاع other.data ؛
}
/**
* قيمة جديدة تحل محل القيمة القديمة
* return النجاح صحيح ، لم يتم العثور عليه كخطأ
*/
مجموعة منطقية عامة (T Oldvalue ، T NewValue) {
الآخر = الرأس ؛
بينما (آخر! = فارغ) {
if (other.data.equals (oldvalue)) {
other.data = newValue ؛
العودة صحيح.
}
أخرى = other.next ؛
}
العودة كاذبة
}
/**
* قم بإزالة العنصر المحدد
* عناصر البيانات param التي يجب إزالتها
* return غير موجود وصحيح للنجاح
*/
إزالة منطقية عامة (T Data) {
الآخر = الرأس ؛
بينما (آخر! = فارغ) {
if (other.data.equals (data)) {
other.perv.next = other.next ؛
طول--؛
العودة صحيح.
}
أخرى = other.next ؛
}
العودة كاذبة
}
/**
* ما إذا تم تضمين هذا العنصر في القائمة المرتبطة
* @مدرج على أنه صحيح ، وليس كاذب
*/
يحتوي المنطق العام على (T Data) {
الآخر = الرأس ؛
بينما (آخر! = فارغ) {
if (other.data.equals (data)) {
العودة صحيح.
}
أخرى = other.next ؛
}
العودة كاذبة
}
/**
* احصل على بيانات العقدة الأخيرة
* @بيانات العودة من العقدة الأخيرة
*/
العام t getlast () {
العودة last.data ؛
}
/**
* الحصول على بيانات العقدة الأولى
* العودة إلى بيانات العقدة الأولى
*/
العام t getFirst () {
إرجاع head.data ؛
}
/**
* احصل على طول القائمة المرتبطة
* @طول العودة
*/
GetSize () {{
عودة طول
}
/**
* هل هو جدول ارتباط فارغ
* @إعادة القائمة الفارغة صحيحة ، والقائمة غير الفارغة خاطئة
*/
منطقية عامة isempty () {
عودة طول == 0 ؛
}
/**
* امسح قائمة الارتباطات
*/
الفراغ العام clear () {
الرأس = فارغ ؛
الطول = 0 ؛
}
/**
* إخراج جميع العقد في القائمة المرتبطة
*/
قائمة طباعة باطلة عامة () {
if (isempty ()) {
System.out.println ("قائمة مرتبطة فارغة") ؛
}آخر{
الآخر = الرأس ؛
لـ (int i = 0 ؛ i <length ؛ i ++) {
system.out.print (other.data+"") ؛
أخرى = other.next ؛
}
System.out.println () ؛
}
}
}