2017-08-12 40 views
0

我嘗試使用下面的代碼來查找LinkedList最後第k個元素。 它爲什麼總是返回nullLinkedList的findElement

public Node findElem(Node head, int k){ 
    if(k < 1|| k > this.length()){ 
     System.out.println("error"); 
    } 
    Node p1=head; 
    Node p2 = head; 
    for(int i=0;i<k-1;i++) { 
     p1 = p1.next; 
    } 
    while(p1 != null){ 
      p1= p1.next; 
      p2 = p2.next; 
    } 
    return p2; 
} 
+1

你從哪裏得到這段代碼?這僅僅因爲多種原因是不正確的。你現在正在做的是在鏈表的末尾找到'null'並返回它,在任何情況下都找不到任何特定的元素。 –

+0

歡迎來到堆棧溢出!它看起來像你需要學習使用調試器。請幫助一些[互補調試技術](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之後仍然遇到問題,請隨時回答一個更具體的問題。 –

回答

0

什麼是你想用的代碼呢?我猜你試圖在LinkedList中找到t節點,它是第k個節點? 但是在任何情況下,你的代碼都是完全無用的。 它應該是這樣的:

public Node findElem(Node head, int k) { 
    if(k < 1 || k > this.length()) { 
     System.out.println("Error"); 
     return null; 
    } 
    Node position = head; 
    while(k > 0) { 
     position = position.next; 
     k--; 
    } 
    return position; 
} 

希望這是你所期待的。如果不能隨意再問我一次。

+0

謝謝你的回答。我知道了。 –

+0

我相信這會找到K鏈表中的節點而不是鏈表中的最後第k個元素。例如,如果你有一個鏈表「1 2 3 4 5 6 7 8 9」你希望在位置9,找出它應該給你1中未9. –

+0

呀,只是改變第k是在while循環成(長度-k)。這將找到最後一個第k個元素。 –

0

你只需要一個變量:參考列表中的第k個元素,它在你的代碼是p1。在此處查找該元素:

for(int i=0; i<k-1;i++) { 
    p1 = p1.next; 
} 

然後返回它。另外,看你以前的if(k<1|| k>this.length()),你只是一個非零值,所以你應該在for環路初始化i 1,因爲head將是你的鏈接列表的1-ST節點。