2016-04-08 19 views
1

Programlamada yeni başlıyorum. Java'da bağlantılı bir listeyi uygulamaya çalışıyorum, nth pozisyonuna eleman yerleştirmek için fonksiyon yazmaya çalıştım ama o pozisyondan önce verileri göstermemek için düzgün çalışmıyor. Size aptalca bir soru ya da hata gibi gelebilir, ama ben acemi olduğum için cevabınız yardımcı olacaktır ve takdir edilecektir.Bağlı listedeki nd'de düğüm noktası ekleme

Gelişmiş teşekkürler.

Kod aşağıda verilmiştir.

class Node{ 
int data; 
Node next; 
Node(){ 
    data=0; 
    next=null; 
} 
} 

class LinkedList{ 
Node head; 
LinkedList(){ 
    head=null; 
} 

    void pushB(int item){ 
     Node temp=new Node(); 
     temp.data=item; 
     temp.next=null; 
     if(head==null){ 
     head=temp;  
     } 
     else{ 
      temp.next=head; 
      head=temp; 
     } 
    } 

    void pushnth(int item, int pos){ 

    Node cur=new Node(); 
    cur.data=item; 
    cur.next=null; 
    Node temp=head; 
    int i=0; 

    while(i<pos-1){ 
     temp=temp.next; 
     i++; 
    } 
    cur.next=temp; 
    head=cur; 
    } 

    void print(){ 
     if(head==null){ 
      System.out.println("List empty"); 
     } 

     else{ 
      Node temp=head; 
      while(temp!=null){ 
       System.out.println(temp.data); 
       temp=temp.next; 
      } 
     } 
    } 
} 


public class MyFirstJavaProgram { 

public static void main(String []args) { 
    System.out.println("Hello World"); 

    LinkedList l1=new LinkedList(); 

    l1.pushB(90); 
    l1.pushB(80); 
    l1.pushB(70); 
    l1.pushB(60); 
    l1.pushB(50); 
    l1.pushB(30); 
    l1.pushB(20); 
    l1.pushB(10); 
    l1.pushnth(40,4); 
    l1.print(); 
} 
} 

cevap

1

Sizin pushnth yöntem listenin head değiştirir ve bu nedenle yeni eleman önce tüm unsurları atar.

Listenin ortasına bir eleman eklemek için 2 link ayarlamalısınız. temp yeni düğüme bağlanması gerekir önce gelir

cur.next=temp; 

düğüm:

yeni düğüm burada yaptığınız sonraki bağlantıya, işaret etmelidir. Kaybettiğin kısım bu. Böyle

şey çalışmalıdır: Bu kod bazı doğrulamaları yoksun

void pushnth(int item, int pos){ 

    Node cur=new Node(); 
    cur.data=item; 
    Node temp=head; 
    int i=0; 

    while(i<pos-2){ // note that I changed the end condition 
     temp=temp.next; 
     i++; 
    } 
    // the new node is placed between temp and temp.next 
    cur.next = temp.next; 
    temp.next = cur; 
} 

Not söyledi. Örneğin, bağlantılı listede çok az öğe varsa, bu kod başarısız olur, bu nedenle bazı ek kontroller eklenmelidir.

+0

Teşekkürler Çok fazla @Eran. anladım. – Parvez

+0

Burada başımızı değiştirmeyiz, ancak başımız bize modifiye edilmiş bir liste veriyor. – Parvez

+0

@Parvez Yalnızca yeni düğümün ilk düğüm olmasını istiyorsanız (push pushB' içinde yaptığınız) başlığı değiştirirsiniz. Ortadaki bir eleman eklediğinizde, listeden bazı düğüm x için x.next dosyasını değiştirerek listeyi değiştirirsiniz. – Eran

İlgili konular