2017-03-07 87 views
0

我給出了指向鏈表頭節點的指針,要添加到列表中的整數以及必須插入整數的位置。 將此節點插入到所需位置後,我需要返回頭節點。在鏈表中的特定位置插入節點

我編寫的代碼由於某種原因而不起作用,並進入無限循環。

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

提示:你的'while'循環結束後,將這個:'的System.out.println( 「節點=」 + node.data + 「上一頁=」 + prev.data);'其實,你需要確保'node'和'prev'首先不爲空。但是我認爲如果你這樣做,你將能夠發現錯誤。 – ajb

回答

5
node = node.next; 
prev = node; 

這應該是相反的順序

prev = node; 
node = node.next; 

並且還代碼不檢查許多情況下,例如,作爲所指定的位置是否比的大小大鏈表。嘗試重寫代碼,你也可以提到你使用哪些值來測試函數。 我認爲prev=node應該拋出一個例外,因爲prev未初始化

1

首先,我找到了位置。 然後通過改變指針在該位置插入新節點。

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