【发布时间】:2011-06-14 06:55:42
【问题描述】:
我使用的是双循环链表。添加值后,我正在从列表中检索值。我正在使用此代码添加值:
public void Add(T data)
{
if (root == null)
{
this.Add(data);
root = new LinkedListNode<T>(data);
last = root;
}
else
{
last.Next = new LinkedListNode<T>(data);
last.Next.Previous = last;
last = last.Next;
}
}
我给出的数据是:
char[] dir = { 'n', 'w', 's', 'e' };
TestProject.classes.LinkedList<char> list = new TestProject.classes.LinkedList<char>();
foreach (char c in dir)
{
list.Add(c);
}
我正在检索列表数据:
public LinkedListNode<T> GetAt(int index)
{
var current = root;
for (int i = 0; i < index; i++)
{
if (current == null)
return null;
current = current.Next;
}
return current;
}
问题是它在检索节点值时将current 的值作为null 给出。
该列表是 stackoverflow 本身的一个示例。
请帮帮我..
我的整个链表类如下:
public class LinkedList<T>
{
protected LinkedListNode<T> root = null;
protected LinkedListNode<T> last = null;
public LinkedList()
{
}
public string ToString()
{
StringBuilder sb = new StringBuilder();
var node = root;
while (node != null)
{
sb.Append("{ " + node.Data.ToString() + " } ");
node = node.Next;
}
return sb.ToString();
}
public T this[int index]
{
get
{
var node = GetAt(index);
if (node == null)
throw new ArgumentOutOfRangeException();
return node.Data;
}
set
{
var node = GetAt(index);
if (node == null)
throw new ArgumentOutOfRangeException();
node.Data = value;
}
}
public LinkedListNode<T> GetAt(int index)
{
var current = root;
for (int i = 0; i < index; i++)
{
if (current == null)
return null;
current = current.Next;
}
return current;
}
public void Add(T data)
{
if (root == null)
{
this.Add(data);
root = new LinkedListNode<T>(data);
last = root;
}
else
{
last.Next = new LinkedListNode<T>(data);
last.Next.Previous = last;
last = last.Next;
}
}
}
public class LinkedListNode<T>
{
public T Data { get; set; }
public LinkedListNode(T data)
{
Data = data;
}
public LinkedListNode<T> Next { get; set; }
public LinkedListNode<T> Previous { get; set; }
}
【问题讨论】:
-
这不是:
public void Add(T data) { if (root == null) { this.Add(data);最终递归(即堆栈溢出)吗?你一遍又一遍地重复调用同一个函数……没有理由让 root 在调用之间发生变化…… -
@forsvarir:但是当我从“public LinkedListNode
GetAt(int index)”函数中检索数据时,值正在发生变化..它给出的当前值为空.. -
@kawade 您是否在构造函数中初始化
root?您是否将last设置为相同的值? -
@forsvarir: 不,我没有在 cunstructor 中初始化任何东西
-
你能发布剩下的列表类吗?
标签: c# list linked-list