2012-12-10 54 views
0

我正在为学习目的编写自己的单个链接列表,但我坚持“获取”方法。尝试获取单个链接列表中元素的值

public void Get(int index) 
{ 
    SLElement curr = _root; 
    SLElement prev = _root._next; 
    for (int i = 0; i <= index; i++) 
    { 
    while (curr._next != null) 
    { 
     if (curr == null) return; 
     prev = curr; 
     curr = curr._next; 
    } 
    } 
    prev._next = curr._next; 
    curr._next = prev; 
    Console.WriteLine("Index {0} has the value {1}", index, curr._value); 
} 

看来工作,但是当我想知道在列表的最后一个元素的值,它给了我一个NullReferenceException 任何办法阻止呢?

+1

'指数 - 1'是你的最大项目 – Boomer

+0

阅读从Dr.Dobb的杂志这个漂亮的一系列关于不对称界篇http://www.drdobbs.com/cpp/asymmetric-bounds-part-1-what-are-they/240001666 –

回答

2

因为它从0开始,当​​(即i < index)您for()循环应停止:

for (int i = 0; i < index; i++) 

的第一个元素是在位置0,所以最后一个是在index - 1位置。

1

我得到它的工作现在这个样子:

public void Get(int index) 
{ 
    SLElement curr = _root; 
    SLElement prev = _root._next; 
    for (int i = 0; i <= index; i++) 
    { 
    while (curr._next != null) 
    { 
     if (curr == null) return; 
     prev = curr; 
     curr = curr._next; 
    } 
    } 
    Console.WriteLine("Index {0} has the value {1}", index, curr._value); 
    if (prev == null) return; 
    prev._next = curr._next; 
    curr._next = _root; 
} 

这对我的作品