在迭代链表时插入新节点

时间:2014-02-09 23:17:29

标签: vb.net

我正在尝试在VB.NET中创建一个有序的元组链表。目前我遇到了排序部分的问题。目前,我只是在插入一个新节点和使用AddBefore或AddAfter时进行迭代,但我一直遇到语法错误。

For node In LinkedList
    If node.Item1 < results.Item1 Then
        LinkedList.AddBefore(node, newnode)
    ElseIf node.Item1 = results.Item1 Then
        LinkedList.AddAfter(node, newnode)
    ElseIf LinkedList.Last.Equals(node) Then
        LInkedList.AddLast(results)
    End If
Next

它只是说有一个语法错误,当我尝试这个时:

For Each node In LinkedList
    If node.Item1 < results.Item1 Then
        LinkedList.AddBefore(node, newnode)
    ElseIf node.Item1 = results.Item1 Then
        LinkedList.AddAfter(node, newnode)
    ElseIf LinkedList.Last.Equals(node) Then
        LInkedList.AddLast(results)
    End If
Next

我收到一个错误,该节点不是合适的类型,因此AddBefore和AddAfter将不起作用。我该如何解决这个问题?

newnode的创建方式如下:

newnode = New LinkedListNode(Of Tuple(Of Double, String))(results)

1 个答案:

答案 0 :(得分:1)

AddBeforeAddAfterAddLast成员期望将节点作为第一个参数。在For Each上使用LinkedList时,将返回的值不是节点。

要遍历LinkedList的节点,您可以使用First属性获取第一个节点,然后在每个节点上使用Next。要获得每个节点的值,您必须使用Value属性:

    Dim node = linkedList.First
    While node IsNot Nothing
        If node.Value.Item1 < results.Item1 Then
            linkedList.AddBefore(node, newnode)
        ElseIf node.Value.Item1 = results.Item1 Then
            linkedList.AddAfter(node, newnode)
        ElseIf linkedList.Last.Equals(node) Then
            linkedList.AddLast(results)
        End If
        node = node.Next
    End While

另一种选择是使用System.Collections.Generic.SortedDictionary自动对密钥进​​行排序。