เนื้อหาหลัก:
เพียงอัปโหลดรหัสมันไม่ได้ จำกัด อยู่ ~~~
แพ็คเกจ pers.ty. $ 1101Datastructure; นำเข้า Java.util.HashTable;/*** @author Administrator* ใช้การดำเนินการพื้นฐานของรายการที่เชื่อมโยงเดี่ยว, การเพิ่มโหนดการลบ, การเรียงลำดับ, การพิมพ์และการคำนวณความยาว*/ข้อมูลส่วนหัวของ MyLinkedList ข้อมูลการแทรก*/ โมฆะสาธารณะ addNode (int d) {node newNode = new node (d); if (head == null) {head = newNode; กลับ; } โหนด tmp = head; ในขณะที่ (tmp.next! = null) {tmp = tmp.next; } // เพิ่มโหนดเพื่อสิ้นสุด tmp.next = newNode; }/*** @param ดัชนี: ลบดัชนีโหนด* @return ส่งคืนจริงสำเร็จและส่งคืนเท็จถ้าล้มเหลว*/บูลีนสาธารณะ deletenode (ดัชนี int) {ถ้า (ดัชนี <1 || ดัชนี> ความยาว () {ส่งคืน false; // ลบตำแหน่งองค์ประกอบที่ไม่สมเหตุสมผล} // ลบองค์ประกอบแรก กลับมาจริง; } int i = 1; โหนด prenode = head; โหนด curnode = prenode.next; ในขณะที่ (curnode! = null) {ถ้า (i == index) {prenode.next = curnode.next; กลับมาจริง; } prenode = curnode; curnode = curnode.next; i ++; } return true; } / ** * @return ส่งคืนความยาวของความยาวรายการที่เชื่อมโยง * / ความยาว int สาธารณะ () {ความยาว int = 0; โหนด tmp = head; ในขณะที่ (tmp! = null) {ความยาว ++; tmp = tmp.next; } ความยาวคืน; } / *** เรียงลำดับรายการที่เชื่อมโยง* @return ส่งคืนโหนดส่วนหัวที่เรียงลำดับ* / โหนดสาธารณะ orderlist () {node nextNode = null; int temp = 0; โหนด curnode = head; ในขณะที่ (curnode.next! = null) {nextNode = curnode.next; ในขณะที่ (nextNode! = null) {ถ้า (curnode.data> nextNode.data) {temp = curnode.data; curnode.data = nextNode.data; nextNode.data = temp; } nextNode = nextNode.next; } curnode = curnode.next; } return head; } / *** พิมพ์ข้อมูลทั้งหมดในรายการที่เชื่อมโยง* / โมฆะสาธารณะ printList () {node tmp = head; ในขณะที่ (tmp! = null) {system.out.print (tmp.data+""); tmp = tmp.next; } system.out.println (); } /*** วิธีแรกในการลบข้อมูลจากรายการที่เชื่อมโยง* สำรวจรายการที่เชื่อมโยงและจัดเก็บข้อมูลที่ผ่านการสำรวจลงใน Hashtable ในระหว่างกระบวนการสำรวจหากมีค่าที่เข้าถึงได้ในปัจจุบันอยู่ใน Hashtable*คุณสามารถลบได้*ข้อดี: ความซับซ้อนเวลาต่ำ: พื้นที่จัดเก็บเพิ่มเติมจำเป็นต้องใช้เพื่อบันทึกข้อมูลที่เข้าถึงได้*/ โมฆะสาธารณะ deleteduplecate1 () {hashtable <จำนวนเต็ม โหนด tmp = head; โหนด pre = null; ในขณะที่ (tmp! = null) {ถ้า (table.containskey (tmp.data)) pre.next = tmp.next; อื่น {table.put (tmp.data, 1); pre = tmp; } tmp = tmp.next; }} / *** วิธีที่สองในการลบข้อมูลที่ซ้ำกันออกจากรายการที่เชื่อมโยง* Double Loop Traversal* ข้อดีและข้อเสียนั้นชัดเจน* / โมฆะสาธารณะ deleteduplecate2 () {node p = head; ในขณะที่ (p! = null) {node q = p; ในขณะที่ (q.next! = null) {ถ้า (p.data == q.next.data) {q.next = q.next.next; } else {q = q.next; }} p = p.next; }} /*** @param k: ค้นหา k-th จนกระทั่งโหนดสุดท้ายในรายการที่เชื่อมโยง* @return โหนดนี้* ตั้งค่าพอยน์เตอร์สองตัว P1 และ P2 เพื่อให้ P2 K เร็วกว่า P1 และข้ามไปข้างหลังในเวลาเดียวกัน เมื่อ P2 ว่างเปล่า P1 คือ k-th จนกระทั่งโหนดสุดท้าย*/ โหนดสาธารณะ findelem (หัวโหนด, int k) {ถ้า (k <1 || k> this.length ()) ส่งคืนค่า null; โหนด p1 = หัว; โหนด p2 = หัว; สำหรับ (int i = 0; i <k-1; i ++) p2 = p2.next; ในขณะที่ (p2.next! = null) {p2 = p2.next; p1 = p1.next; } return p1; } / *** ใช้การกลับรายการของรายการที่เชื่อมโยง* @param หัวโหนดหัวของรายการที่เชื่อมโยง* / โมฆะสาธารณะ reversitiveTaright (หัวโหนด) {โหนด Preversedhead = Head; โหนด pnode = head; โหนด pprev = null; ในขณะที่ (pnode! = null) {node pnext = pnode.next; if (pnext == null) Preversedhead = pnode; pnode.next = pprev; pprev = pnode; pnode = pnext; } this.head = preversedhead; } / *** เอาต์พุตรายการที่เชื่อมโยงเดียวจากหางไปที่หัวโดยการเรียกซ้ำ* @param head* / โมฆะสาธารณะ printListreversely (หัวโหนด) {ถ้า (หัว! = null) {printlistreversely (head.next); System.out.print (head.data+""); }} / *** สอบถามโหนดกลางของรายการที่เชื่อมโยงเดียว* กำหนดสองพอยน์เตอร์ทีละขั้นตอนและอีกสองขั้นตอนต่อครั้ง ...* @param Head* @return Q คือโหนดกลาง* / โหนดสาธารณะ SearchMid (หัวโหนด) {Node Q = Head; โหนด p = head; ในขณะที่ (p! = null && p.next! = null && p.next.next! = null) {q = q.next; p = p.next.next; } return Q; } / *** ลบโหนดที่ระบุโดยไม่ทราบว่าตัวชี้หัว* โหนดหางของรายการที่เชื่อมโยงไม่สามารถลบได้เนื่องจากตัวชี้ถัดไปของโหนดรุ่นก่อนไม่สามารถตั้งค่าให้ว่างเปล่าหลังจากการลบ* โหนดอื่น ๆ สามารถแลกเปลี่ยนค่าของโหนดนี้ if (n == null || n.next == null) return false; int tmp = n.data; n.data = n.next.data; n.next.data = tmp; n.next = n.next.next; กลับมาจริง; } / *** พิจารณาว่าสองรายการที่เชื่อมโยงกันตัดกัน* หากสองรายการที่เชื่อมโยงกันจะต้องมีโหนดหางเดียวกันหรือไม่ให้สำรวจรายการที่เชื่อมโยงทั้งสองรายการบันทึกโหนดหางและดูว่าพวกเขามีส่วนหัว* @Param H1 h2) {ถ้า (h1 == null || h2 == null) return false; โหนด tail1 = h1; ในขณะที่ (tail1.next! = null) {tail1 = tail1.next; } โหนด tail2 = h2; ในขณะที่ (tail2.next! = null) {tail2 = tail2.next; } return tail1 == tail2; } / ** * ค้นหาโหนดแรกที่ตัดกัน * @param h1 * @param h2 * @return * / โหนดสาธารณะ getFirstMeetNode (โหนด H1, โหนด H2) {ถ้า (h1 == null || h2 == null) return null; โหนด tail1 = h1; int len1 = 1; ในขณะที่ (tail1.next! = null) {tail1 = tail1.next; Len1 ++; } โหนด tail2 = h2; int len2 = 1; ในขณะที่ (tail2.next! = null) {tail2 = tail2.next; Len2 ++; } if (tail1! = tail2) {return null; } โหนด T1 = H1; โหนด T2 = H2; // ค้นหารายการที่เชื่อมโยงนานขึ้นและผ่านถ้า (len1> len2) {int d = len1-len2; ในขณะที่ (d! = 0) {t1 = t1.next; D--; }} if (len1 <len2) {int d = len2-len1; ในขณะที่ (d! = 0) {t2 = t2.next; D--; }} ในขณะที่ (t1! = t2) {t1 = t1.next; t2 = t2.next; } return t1; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myLinkedList list = new MyLinkedList (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของทุกคน ฉันหวังว่าจะสนับสนุน Wulin.com เพิ่มเติม!