บทความนี้แบ่งปันรหัสที่เกี่ยวข้องสำหรับ Java เพื่อใช้รายการที่เชื่อมโยงเดียวและรายการที่เชื่อมโยงสองทางสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
Java ใช้รายการที่เชื่อมโยงเดียว:
แพ็คเกจรหัส; โหนดคลาส {โหนดถัดไป; ข้อมูล int; โหนดสาธารณะ (ข้อมูล int) {this.data = ข้อมูล; }} คลาส linkList {โหนดก่อน; // หัวหน้า Public LinkList () {this.first = null; } โมฆะสาธารณะ addNode (NODE NO) {No.Next = First; ครั้งแรก = ไม่; // เพิ่มในหัว} โมฆะสาธารณะ delectNode () {node n = first.next; ครั้งแรก = null; First = N; // ลบในหัว} // ลบตำแหน่งที่ระบุตำแหน่งสาธารณะที่ระบุ () {int count = 1; // ดูว่ามีกี่องค์ประกอบที่มีโหนด nd = ก่อน; ในขณะที่ (nd.next! = null) {nd = nd.next; นับ ++; } นับคืน; } โมฆะสาธารณะ DELECTEXACT (int n) {// ลบตำแหน่งที่ระบุถ้า (n> 1) {int count = 1; Node de = ก่อน; ในขณะที่ (นับ <n-1) {de = de.next; นับ ++; } de.next = de.next.next; } else first = first.next; } โมฆะสาธารณะ addExact (int n, โหนด nd) {ถ้า (n> 1) // เพิ่มตำแหน่งที่ระบุ {int count = 1; Node de = ก่อน; ในขณะที่ (นับ <n-1) {de = de.next; นับ ++; } nd.next = de.next; de.next = nd; } else first = first.next; } public int findNode (int n) {int count = 1; // ค้นหาตำแหน่งที่สอดคล้องกับ Number Node DE = ก่อน; ในขณะที่ (de.data! = n) {de = de.next; นับ ++; if (de == null) {return -1; }} นับคืน; } public void print () {node no = ก่อน; // พิมพ์ทั้งหมดในขณะที่ (ไม่! = null) {system.out.println (no.data); ไม่ = ไม่ NEXT; }}} คลาสสาธารณะ textNode {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {linkList ll = new LinkList (); ll.addnode (โหนดใหม่ (12)); ll.addnode (โหนดใหม่ (15)); ll.addnode (โหนดใหม่ (18)); ll.addnode (โหนดใหม่ (19)); ll.addnode (โหนดใหม่ (20)); /*system.out.println(ll.first.data); LL.DelectNode (); System.out.println (ll.first.data);*/ system.out.println (ll.number ()); LL.DelectExact (3); ll.addexact (3, โหนดใหม่ (100)); System.out.println (ll.number ()); // ll.print (); System.out.println (ll.findnode (112)); -Java ใช้รายการที่เชื่อมโยงสองทาง:
คลาสสาธารณะ doublelink {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {node2 no = new node2 (5); NO.ADDLEFT (ใหม่ Node2 (6)); NO.ADDRIGHT (ใหม่ Node2 (7)); /*no.print (); NO.PRINT2 ();*/ no.AdDexact2 (1, node2 ใหม่ (8)); ไม่พิมพ์ (); System.out.println ("-------------------"); NO.PRINT2 (); }} คลาส node2 {public node2 ก่อน; จุดสิ้นสุดของ Node2 สาธารณะ Node Public 2 ซ้าย; Node Public 2 สิทธิ; ข้อมูล int = 0; Public Node2 (int n) {first = this; สิ้นสุด = สิ่งนี้; First.data = n; } // เพิ่มโมฆะสาธารณะจากหัว addleft (node2 ก่อน) {first.left = ก่อน; ก่อนหน้า = ก่อน; ก่อน = ก่อน; } // เพิ่มโมฆะสาธารณะจากหาง addright (node2 หลังจาก) {end.right = หลัง; หลังจากไปทางซ้าย = สิ้นสุด; สิ้นสุด = หลัง; } // แทรกจำนวนโมฆะสาธารณะ addExact (int n, node2 no) {int count = 0; if (n == 0) {addleft (ไม่); } else {node2 f = ก่อน; ในขณะที่ (จริง) {f = f.right; นับ ++; if (count == n) {// นี่คือการเปลี่ยนแปลงในการชี้ของสี่พอยน์เตอร์ no.left = f.left; f.left.right = ไม่; // first.left = no; ไม่ถูกต้อง = f; f.left = ไม่; หยุดพัก; }}}}} // แทรกจำนวนโมฆะสาธารณะ addExact2 (int n, node2 no) {int count = 0; if (n == 0) {addright (ไม่); } else {node2 f = end; ในขณะที่ (จริง) {f = f.left; นับ ++; if (count == n) {ไม่ leleft = f; NO.RIGHT = F.RIGHT; f.right.left = ไม่; f.right = ไม่; หยุดพัก; }}}}} // เป็นโมฆะสาธารณะ Traversal Public Public Print () {System.out.println (First.data); ในขณะที่ (first.right! = null) {system.out.println (first.right.data); ก่อน = ก่อนถูกต้อง; } // system.out.println (end.data); } // reverse order traversal public print2 () {system.out.println (end.data); ในขณะที่ (end.left! = null) {system.out.println (end.left.data); end = end.left; }}}/*เป็นที่น่าสังเกตว่าทุกครั้งที่มีการแทรกวัตถุใหม่คุณต้องใส่ใจกับการเปลี่ยนแปลงของชี้ชี้ อย่างแรกการชี้ของทั้งสองด้านของวัตถุใหม่นี้ (ซ้ายและขวา) ตามด้วยการชี้ของวัตถุซ้ายไปทางขวาและการชี้ของวัตถุขวาไปทางซ้าย การชี้ของพอยน์เตอร์ทั้งสี่นี้จะต้องถูกต้องมิฉะนั้นอาจนำไปสู่การไม่สามารถดำเนินการข้ามคำสั่งเชิงบวกหรือแบบย้อนกลับได้ *//*เปรียบเทียบรายการที่เชื่อมโยงเดียวรายการที่เชื่อมโยงเดียวสามารถข้ามได้จากทิศทางเดียวเท่านั้นเนื่องจากมีเพียงหัวเดียวในขณะที่รายการที่เชื่อมโยงแบบสองทิศทางมีหัวและหาง มันสามารถข้ามจากหัว * หรือจากหาง ยิ่งไปกว่านั้นเนื่องจากหนึ่งในวัตถุมีพอยน์เตอร์ในสองทิศทางจึงสามารถรับวัตถุ * ทางด้านซ้ายและวัตถุทางด้านขวา * แต่สำหรับรายการที่เชื่อมโยงเดียวเนื่องจากมีเพียงทิศทางเดียวพวกเขาสามารถไปทางซ้ายหรือขวาเท่านั้น เมื่อเพิ่มวัตถุคุณสามารถเพิ่มได้ตั้งแต่ต้นหรือจากจุดสิ้นสุด * หากรายการที่เชื่อมโยงเดียวจำเป็นต้องเพิ่มสองทิศทางมันเป็นของหายากหรือไม่เพราะมีเพียงพอยน์เตอร์ไปทางทิศทางเดียวไปทางซ้ายหรือขวา* ในขณะที่แต่ละวัตถุของรายการที่เชื่อมโยงแบบสองทิศทางมีพอยน์เตอร์ไปสองทิศทางซึ่งไม่ยืดหยุ่นมากขึ้น -ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม Java