Saya punya masalah yang sangat sepele, yang seharusnya hanya mengganti tautan saja. Saya telah membaca beberapa jawaban, dan beberapa menunjukkan bagaimana melakukan ini dengan menukar data, dan beberapa memberikan penjelasan yang tidak jelas tentang konsep tersebut.
Inilah metode yang sepertinya membuat saya berputar-putar. Ketika saya menukar node target ke node sebelumnya, node tersebut dilewati begitu saja. Kemudian ketika saya kembali ke referensi node berikutnya, saya terjebak dalam lingkaran abadi. Saya perlu tahu apakah saya memerlukan node lain yang melintasi dari kepala, atau apakah saya cukup mereferensikan tautan baru. Saya tahu saya melewatkan sesuatu yang cukup jelas.
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();
}
Ini adalah metode pengujian saya, membuat daftar 7 node, dan mencetak ke layar.
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());
}
Ini adalah output yang saya dapatkan:
{18, 28, 2, 12, 8, 14, 4}
12
8
14
{18, 28, 2, 12, 14, 4}
Output yang diinginkan adalah:
{18, 28, 2, 12, 8, 14, 4}
{18, 28, 2, 8, 12, 14, 4}
SLL
danTarget
. Saya melihat Anda menggunakancursor.link
kadang-kadang dancursor.getLink()
di lain waktu, jadi tidak jelas tentang perilaku spesifiknya. - person lealceldeiro   schedule 12.07.2018