2011-03-14 53 views
1

我有链表这个Java分配。该问题要求从最后找到第n个节点。我已经测试过不同的投入,它的工作正常,但法官不接受我的解决方案。这里是我的功能的Java分配

功能为基准,以表头和n这将永远非负的值。

Node findNtoLast (Node start, int n) 
{ 
    Node p,q; 

    p = start; 

    for(int i=0;i<n;i++) 
    { 
     p = p.next; 
    } 

    q = start; 

    while(p.next != null) 
    { 
     p = p.next; 
     q = q.next; 
    } 

    return q; 
} 

样品输入:

甲 - >乙 - “ç - > d

n  output 
0  D 
1  C 
2  B 
3  A 

能否请你想到什么,这是错误的功能?

+0

试试你的功能与比'N'短名单。 – 2011-03-14 06:37:06

+0

@ Jon-如果列表的大小也是已知的,则工作更容易。 – Mahesh 2011-03-14 06:44:52

回答

5

我认为你需要处理,其中输入

n >= num of nodes 

您当前的功能会给一个NullPointerException这样的输入的情况下。

编辑:

您可以计算节点的数量并进行比较。或者你可以做一个检查你的for环路:

for(int i=0;i<n;i++) { 

    // have I reached the last node ? 
    if (p.next != null) { 
     p = p.next; 
    } else { 
     // n happens to be >= num of nodes..return null 
     return null; 
    } 
} 
+0

你是对的人。我应该计算节点的数量并进行比较吗? – Jon 2011-03-14 06:45:13

+0

@Jon:答复已更新。 – codaddict 2011-03-14 06:49:16

+0

工作。非常感谢。 – Jon 2011-03-14 06:51:38