Hoşgeldiniz
GECE MODU
Okuma Moduna Geç
11 Ocak 2018 - 00:39
Java - Linked Lists

Değişkenler çağırıldıklarında belli bir noktayı işaret ederler ve o noktada var olan değeri döndürürler. Öte yandan bir değişken farklı bir değişkene atandığında o artık hafızada farklı bir alandadır ve dilediğimiz gibi değiştirebiliriz. Yani:

int a = 10;
int b = a;
b = 20; // a = 10, b = 20

Fakat işler referans mantığında biraz daha farklı işliyor. Eğer elimizde bir dizi olduğunu varsayarak yukarıdaki işlemi yapmaya kalkarsak:

int[] a = {10,20,30,40,50};
int[] b = a;
b[1] = 25; // a = {10,25,30,40,50} , b = {10,25,30,40,50}

Çünkü ikinci satırda yer alan eşitlikte aslında yapılan işlem a dizisinin başlamış olduğu hafızadaki yeri b değişkenine atamak. Bu yüzden b değişkeninde değişiklik yapmak demek aslında hafızanın o noktasında değişiklik yapmak demek. Sonucunda da her iki dizi aynı noktayı çağırdığı için ikisinde birden sonuç değişecektir.

Linked List Nedir?

LinkedList iki veriyi tek bir bölgede tutar. İlki değeri, ikincisi kendisinden sonra gelen değeri temsil eder. Yani:

şeklinde bir yapıya sahiptirler. Bu görselde gördüğünüz yapı Node olarak tanımlanır ve birçok Node arka arkaya eklenerek bir liste halini alırlar. Bu listelerde Linked List olarak ifade edilir.

List Node Nasıl Oluşturulur?

List Node'lar içerisinde değer ve sonraki olarak 2 parametre bulunduruyorlar. Şu şekilde bir sınıf oluşturabiliriz:

public class ListNode {
	int data;
	ListNode next;
	
	ListNode(){
		this.data = -1;
		this.next = null;
	}
	ListNode(int data) {
		this.data = data;
		this.next = null;
	}
	ListNode(int data, ListNode next){
		this.data = data;
		this.next = next;
	}
}

Kodu incelediğimiz zaman temelde data ve next değişkenleri dikkat çekiyor. Geri kalan kısım zaten varsayılan constructorlar... Eğer biz genel sınıfımızda bir ListNode oluşturursak ya yalnızca değeri atayacağız ve sonraki kısmını null atayacak, ya da hem değeri hemde sonrakini atayacağız.

ListNode a = new ListNode(10);
a.next = new ListNode(20);
a.next.next = new ListNode(30);

System.out.println(a.data);
System.out.println(a.next.data);
System.out.println(a.next.next.data);

şeklinde ekrana çıktı verdirebiliriz.

10
20
30

Ama elbette bu çok büyük listelerde tek tek yazılacak bir durum değil!

Linked List Ekleme Yapmak

Başlangıca

public static void main(String[] args) {
	ListNode a = new ListNode(10);
	a.next = new ListNode(20);
	a.next.next = new ListNode(30);
	
	System.out.println("Başlangıç: "+a.data);
		
	a = addFirst(a, 50);
		
	System.out.println("Başlangıç: "+a.data);
}
	
static ListNode addFirst(ListNode b, int value) {
	ListNode c = new ListNode(value, b);
	return c;
}

Indis (Index) Değerine Göre

public static void main(String[] args) {
	ListNode a = new ListNode(10);
	a.next = new ListNode(20);
	a.next.next = new ListNode(30);
	
	a = addMiddle(a, 2, 35);
	
	while(a != null) {
		System.out.println(a.data);
		a = a.next;
	}
}

static ListNode addMiddle(ListNode b, int index, int value) {
	ListNode c = b;
	
	for(int i = 1; i<index; i++) {
		c = c.next;
	}
	
	ListNode add = new ListNode(value, c.next);
	c.next = add;
	
	return b;
}

Sona

public static void main(String[] args) {
	ListNode a = new ListNode(10);
	a.next = new ListNode(20);
	a.next.next = new ListNode(30);
	
	a = addLast(a, 35);
	
	while(a != null) {
		System.out.println(a.data);
		a = a.next;
	}
}

static ListNode addLast(ListNode b, int value) {
	ListNode c = b;
	
	while(c.next != null) {
		c = c.next;
	}
	c.next = new ListNode(value);
	
	return b;
}

Linked List get() Metodu

public static void main(String[] args) {
	ListNode a = new ListNode(10);
	a.next = new ListNode(20);
	a.next.next = new ListNode(30);
	
	int result = get(a, 2);
	System.out.println(result);
	
}

static int get(ListNode b, int index) {
	ListNode c = b;
	
	for(int i = 0; i<index; i++) {
		c = c.next;
	}
	return c.data;
}

Linked List remove() Metodu

public static void main(String[] args) {
	ListNode a = new ListNode(10);
	a.next = new ListNode(20);
	a.next.next = new ListNode(30);
	
	a = remove(a, 1);
	
	while(a != null) {
		System.out.println(a.data);
		a = a.next;
	}
}

static ListNode remove(ListNode b, int index) {
	ListNode c = b;
	
	for(int i = 1; i<index; i++) {
		c = c.next;
	}
	c.next = c.next.next;
	return c;
}
Sponsorlu Bağlantı
İlk Yorumu Sen Bırak!
Bu konu hakkında henüz kimse görüş bildirmedi. İlk görüşü sen aktarmak ister misin?
Adınız ve Soyadınız
Mail Adresiniz
Mail adresinizi yalnızca yönetici görüntüleyebilir.
Web Siteniz
Yorumunuz
Yorumu Gönder