Inserarea unui nod la o anumită poziție într-o listă legată (Programare, Java, Algoritm, Structuri De Date, Listă Legată)

shashank a intrebat.

Mi se dă pointerul la nodul de cap al unei liste legate, un număr întreg de adăugat la listă și poziția la care trebuie inserat numărul întreg. După ce am inserat acest nod în poziția dorită, trebuie să returnez nodul principal.

Din anumite motive, codul pe care l-am scris nu funcționează și intră într-o buclă infinită.

  class Node {
     int data;
     Node next;
  }


Node InsertNth(Node head, int data, int position) {
    int count = 0;
    Node node = head;
    Node prev = null;
    while(count != position){
      count++;
      node = node.next;
      prev = node;
    }

    Node newNode = new Node();
    newNode.data = data;


    newNode.next = node;
    if(count == 0){
          head = newNode;
       }else{
          prev.next = newNode;
    }

    return head;          
}

Comentarii

  • Indicație: Puneți acest lucru după sfârșitul fișierului dvs. while buclă: System.out.println("node = " + node.data + " prev = " + prev.data); De fapt, va trebui să vă asigurați că node și prev nu sunt nule mai întâi. Dar cred că veți putea identifica eroarea dacă faceți acest lucru. –  > Por ajb.
3 răspunsuri
DeepDive
node = node.next;
prev = node;

Acest lucru ar trebui să fie în ordinea opusă

prev = node;
node = node.next;

Și, de asemenea, codul nu verifică pentru multe cazuri , de exemplu, dacă poziția specificată este mai mare decât dimensiunea listei legate. Încercați să rescrieți codul , de asemenea ați putea menționa ce valori folosiți pentru testarea funcției. cred că prev=node ar trebui să arunce o excepție deoarece prev nu a fost inițializat

Akanksha

În primul rând, găsesc poziția. Apoi inserez noul nod în acea poziție prin schimbarea indicatorilor.

  Node InsertNth(Node head, int data, int position) {

    Node newNode= new Node();
    newNode.data=data;

    Node ptr = head;
    pos = pos - 1;
    for (int i = 1; ; i++) {
     if(ptr==null)
       {  break;
           }
        if (i == pos) {
            newNode.next=ptr.next;
            ptr.next=newNode;
            break;
        }
        ptr = ptr.next;
    }
}

Ashutosh kumar Mishra
public static Node InsertNth(Node head, int data, int position) {

          Node node = new Node(data);
          node.next = null;
          if (head == null && position == 0){
              head = node;
          }
          else if(head != null && position == 0){
              node.next = head;
              head = node;
          }
          Node tempCurrentNode = head ;
          Node tempPreviousNode = null;
          int index = 0;
          while (index < position) {
              tempPreviousNode =  tempCurrentNode;
              tempCurrentNode = tempCurrentNode.next;
              index = index + 1;
          }
            node.next = tempCurrentNode;
            tempPreviousNode.next = node;

         return head;
    }