2016-04-08 18 views
1

私はプログラミングの初心者です。私はjavaでリンクリストを実装しようとしていますが、n番目の位置に要素を挿入する関数を記述しようとしましたが、その位置の前にデータを表示していないことが正しく機能していません。あなたには愚かな質問や間違いのように見えるかもしれませんが、私は初心者ですから、あなたの答えが役立ち、それは高く評価されます。リンクリストのn番目の位置にノードを挿入する方法

ありがとうございました。

コードは以下のとおりです。

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(); 
} 
} 

答えて

1

あなたpushnth方法は、リストのheadを変更し、そのための新しい要素の前にすべての要素を破棄します。

リストの中央に要素を追加するには、2つのリンクを設定する必要があります。 tempは、新しいノードにリンクされなければならないの前に来る

cur.next=temp; 

ノード:

新しいノードは、あなたがここで行う次のリンク、を指している必要があります。それが欠けている部分です。このような

何か作業をする必要があります:このコードは、いくつかの検証を欠いていること

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; 
} 

注意を。たとえば、リンクされたリストに要素が少なすぎる場合、このコードは失敗するため、いくつかの追加チェックを追加する必要があります。

+0

ありがとうございます@エラン。わかった。 – Parvez

+0

ここでは頭を修正するのではなく、頭がどのように私たちに修正されたリストを与えているのですか。 – Parvez

+0

@Parvez新しいノードを(pushBで行う)最初のノードにしたい場合にのみ、頭を修正します。真ん中に要素を追加すると、リスト内のノードxのx.nextを変更してリストを変更します。 – Eran