บล็อกนี้ค่อนข้างง่าย เพียงดูลำดับย้อนกลับของรายการที่เชื่อมโยงเดียวหากคุณไม่เข้าใจ
แนวคิดการสั่งซื้อย้อนกลับ
ตอนนี้สมมติว่ามีรายการที่เชื่อมโยงซึ่งจะดำเนินการตามลำดับย้อนกลับ สิ่งแรกที่เราคิดคือการย้อนกลับความสัมพันธ์ของตัวชี้
อันที่จริงแล้วมันก็คือ บล็อกเกอร์เป็นการดำเนินการตามลำดับรายการที่เชื่อมโยงเดียวกับเป้าหมายนี้
โหนด pre = null; โหนดโพสต์ = null; ในขณะที่ (หัว! = null) {post = head.next; head.next = pre; pre = head; head = post;}นี่คือแกนหลักของลำดับย้อนกลับ มาอธิบายทีละขั้นตอน
ในตอนแรกก่อนและโพสต์จะถูกตั้งค่าเป็นโมฆะ สิ่งนี้มีความจำเป็นเพราะหลังจากบรรทัดของการดำเนินการโค้ดของ head.next = pre, โหนดหัวเดิมของเราถัดไปจะกลายเป็นโมฆะนั่นคือโมฆะของรายการที่เชื่อมโยงทั้งหมดของเรา
ลองนึกภาพว่าในตอนท้ายของรายการลิงก์ดั้งเดิมนั้นเป็นโมฆะด้วยหรือไม่? ความจริงที่นี่เหมือนกัน
ในเวลานี้การอัปเดตก่อนไปยังโหนดหัวเดิมยังเตรียมสำหรับขั้นตอนต่อไปของการสั่งซื้อย้อนกลับและหัวตามธรรมชาติจะกลายเป็น head.next ดั้งเดิม
ขออภัยมือของฉันสั่นเทาและฉันก็ทำผิด ขอบคุณทุกคน ครั้งที่ห้าในแผนภาพที่วาดด้วยมือระบุว่าโหนดก่อนควรอยู่ที่ตำแหน่งของโหนด 5 และไม่มีหัว
ไม่ยากที่จะเห็นจากตำนานที่เราย้ายหัวไปข้างหลังซ้ำแล้วซ้ำอีกและอัปเดตโหนดก่อนในเวลาเดียวกันเพื่อให้ได้ผลของลำดับย้อนกลับ
รหัส
รายการแพ็คเกจ; คลาสสาธารณะ reverselist {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {โหนดหัว = โหนดใหม่ (1); int [] value = {2,3,4,5}; โหนด temp = head; สำหรับ (int i = 0; temp.next;} printlist (หัว); // ผกผันลำดับของเอาท์พุทรายการรายการที่เชื่อมโยงเดียว = ย้อนกลับ (หัว); printlist (หัว); // ย้อนกลับหัวอีกครั้ง = reversesinglelist (head); printlist (head); head.next;} system.out.println ();} โหนดคงที่สาธารณะย้อนกลับ (หัวโหนด) {โหนด pre = null; โหนดโพสต์ = null; ในขณะที่ (หัว! = null) {post = head.next; head.next = pre; pre = head; head = post; null; ในขณะที่ (head! = null) {next = head.next; head.next = pre; pre = head; head = next;} return pre;}} class node {ค่า int สาธารณะ; โหนดสาธารณะถัดไป; โหนดสาธารณะ (ค่า int) {this.value = value;}}}}}}ทดสอบ
หลังจากการทดสอบแล้วเอาต์พุตรหัสถูกต้อง
1 2 3 4 5
5 4 3 2 1
1 2 3 4 5
เพื่อช่วยให้เข้าใจนี่เป็นอีกตัวอย่างหนึ่ง:
/** * java ใช้ลำดับย้อนกลับของรายการที่เชื่อมโยงเดียว * @author Administrator * */คลาสสาธารณะ singlelinkedReverse {class node {int data; โหนดถัดไป; โหนดสาธารณะ (ข้อมูล int) {this.data = data; = tail = slr.new node (0); สำหรับ (int i = 1; i <10; i ++) {node p = slr.new node (i); tail.next = p; tail = p;} tail = หัว; - ในขณะที่ (head! = null) {system.out.print (head.data+""); head = head.next;}} โหนดคงที่ส่วนตัวย้อนกลับ (หัวโหนด) {โหนด p1, p2 = null; p1 = head; p2;}}ผลการทดสอบ:
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับตัวอย่างรหัสของการใช้การสั่งซื้อย้อนกลับของรายการที่เชื่อมโยง Java เดี่ยว ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!