Skip to main content

Alternating split of singly linked list in vb.net

Vb program for Alternating split of singly linked list. Here problem description and other solutions.

' Include namespace system
Imports System 
'  Vb.net program for
'  Alternating split of a given singly linked list

'  Node of LinkedList
Public Class LinkNode
    Public  data As Integer
    Public  [next] As LinkNode
    Public Sub New(ByVal data As Integer)
        '  Set node value
        Me.data = data
        Me.next = Nothing
    End Sub
End Class

Public Class MyLinkedList
    Public  head As LinkNode
    Public Sub New()
        Me.head = Nothing
    End Sub
    '  Add new node at the end of linked list
    Public Sub insert(ByVal value As Integer)
        '  Create a new node
        Dim node As LinkNode = New LinkNode(value)
        if (Me.head  Is  Nothing) Then
            Me.head = node
        Else
            Dim temp As LinkNode = Me.head
            '  Find last node
            while (temp.[next] IsNot Nothing)
                '  Visit to next node
                temp = temp.[next]
            End While
            '  Add node at last position
            temp.[next] = node
        End IF
    End Sub
    '  Display all Linked List elements
    Public Sub display()
        if (Me.head IsNot Nothing) Then
            Dim temp As LinkNode = Me.head
            while (temp IsNot Nothing)
                '  Display node value
                Console.Write("  " + temp.data.ToString())
                '  Visit to next node
                temp = temp.[next]
            End While
        Else
            Console.WriteLine("Empty Linked list")
        End IF
    End Sub
    '  Split the linked list by alternating nodes
    Public Function  splitting() As LinkNode
        Dim result As LinkNode = Nothing
        if (Me.head IsNot Nothing) Then
            '  Some auxiliary variables
            Dim temp As LinkNode = Me.head
            Dim tail As LinkNode = Nothing
            Dim current As LinkNode = Nothing
            Dim prev As LinkNode = Me.head
            while (temp IsNot Nothing AndAlso temp.[next] IsNot Nothing)
                current = temp.[next]
                prev = temp
                temp = temp.[next].[next]
                if (result  Is  Nothing) Then
                    '  When first node of second linked list
                    current.[next] = result
                    result = current
                    tail = current
                Else
                    '  Add Alternating node to end of 
                    '  second linked list
                    current.[next] = tail.[next]
                    tail.[next] = current
                    tail = current
                End IF
                prev.[next] = temp
            End While
        End If
        Return result
    End Function
    Public Shared Sub Main(ByVal args As String())
        Dim l1 As MyLinkedList = New MyLinkedList()
        Dim l2 As MyLinkedList = New MyLinkedList()
        '  Add node in l1 linked list
        l1.insert(1)
        l1.insert(2)
        l1.insert(3)
        l1.insert(4)
        l1.insert(5)
        l1.insert(6)
        l1.insert(7)
        l1.insert(8)
        '  Before splitting l1
        Console.Write("L1 list : ")
        l1.display()
        l2.head = l1.splitting()
        Console.WriteLine( vbLf &"After splitting ")
        Console.Write("L1 list : ")
        l1.display()
        Console.Write( vbLf &"L2 list : ")
        l2.display()
    End Sub
End Class

Output

L1 list :   1  2  3  4  5  6  7  8
After splitting
L1 list :   1  3  5  7
L2 list :   2  4  6  8




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment