ฉันมีปัญหาเล็กน้อยมาก สิ่งที่ควรเป็นเรื่องของการเปลี่ยนลิงก์ ฉันได้อ่านคำตอบบางส่วนแล้ว และบางคำตอบก็แสดงวิธีการทำเช่นนี้โดยการสลับข้อมูล และบางคำตอบก็ให้คำอธิบายที่คลุมเครือเกี่ยวกับแนวคิดนี้
นี่คือวิธีการที่ดูเหมือนว่าจะทำให้ฉันเป็นวงกลม เมื่อฉันสลับโหนดเป้าหมายเป็นโหนดก่อนหน้า โหนดนั้นจะถูกข้ามไป จากนั้นเมื่อฉันกลับไปอ้างอิงโหนดถัดไป ฉันจะติดอยู่ในวงวนชั่วนิรันดร์ ฉันจำเป็นต้องรู้ว่าฉันต้องการโหนดอื่นที่ข้ามจากส่วนหัวหรือไม่ หรือฉันสามารถอ้างอิงลิงก์ใหม่ได้หรือไม่ ฉันรู้ว่าฉันขาดอะไรบางอย่างที่ค่อนข้างชัดเจนไป
for (cursor = head; cursor != null; cursor = cursor.link) {
if (target == cursor.data) {
Target = cursor.link.getLink();
next = cursor.getLink();
prev = cursor;
System.out.println(prev.getData()); // for testing
System.out.println(next.getData());
prev.setLink(Target); // Swaps the first link
//Target.setLink(prev); // causes eternal loop
}}
return Target.getData();
}
นี่คือวิธีทดสอบของฉัน โดยสร้างรายการโหนด 7 รายการ และพิมพ์ลงหน้าจอ
public static void main(String[] args) {
SLL LL = new SLL(18, null);
LL.add(4);
LL.add(14);
LL.add(8);
LL.add(12);
LL.add(2);
LL.add(28);
System.out.println(LL.toString());
System.out.println(LL.swap(12));
System.out.println(LL.toString());
}
นี่คือผลลัพธ์ที่ฉันได้รับ:
{18, 28, 2, 12, 8, 14, 4}
12
8
14
{18, 28, 2, 12, 14, 4}
ผลลัพธ์ที่ต้องการจะเป็น:
{18, 28, 2, 12, 8, 14, 4}
{18, 28, 2, 8, 12, 14, 4}
SLL
และTarget
ฉันเห็นว่าคุณใช้cursor.link
บางครั้งและcursor.getLink()
ครั้งอื่นๆ ดังนั้นจึงไม่มีความชัดเจนเกี่ยวกับพฤติกรรมที่เฉพาะเจาะจง - person lealceldeiro   schedule 12.07.2018