2017-08-12 41 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节点。