Random Singly Linked List Generator using Python

Generating random singly linked list using Python having elements (numbers, primes, alphabets)

Initialize Node for linked list

Singly Linked List data structure is created with insertion at end process.

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None

class SLL:
    def __init__(self):
        self.head = None
        self.tail = None
    
    def insertEnd(self,val):
        node = Node(val)
        if not self.head:
            self.head = self.tail = node
            return
        self.tail.next = node
        self.tail = node

 

random => start to end both included with

randSLL() takes parameters start (starting number), end (ending number) and count (number of elements in the linked list, default 1). This function generates a singly linked list consist of random numbers from start to end (both start and end included) with length of count and returns the head of the singly linked list.

def randSLL(start:int, end:int, count:int = 1):
    sll = SLL()
    for _ in range(count):
        rval = random.randint(start,end)
        sll.insertEnd(rval)
    return sll.head

random => start to end both included odd

randOddSLL() takes parameters start (starting number), end (ending number) and count (number of elements in the linked list, default 1). This function generates a singly linked list consist of random odd numbers from start to end (both start and end included) with length of count and returns the head of the singly linked list.

def randOddSLL(start:int, end:int, count:int = 1):
    sll = SLL()
    while count>0:
        rval = random.randint(start,end)
        if rval%2!=0:
            sll.insertEnd(rval)
            count-=1
    return sll.head

random => start to end both included even

randEvenSLL() takes parameters start (starting number), end (ending number) and count (number of elements in the linked list, default 1). This function generates a singly linked list consist of random even numbers from start to end (both start and end included) with length of count and returns the head of the singly linked list.

def randEvenSLL(start:int, end:int, count:int = 1):
    sll = SLL()
    while count>0:
        rval = random.randint(start,end)
        if rval%2==0:
            sll.insertEnd(rval)
            count-=1
    return sll.head

random => PRIME

randPrime() takes parameters start (starting number), end (ending number) and count (number of elements in the linked list, default 1). This function generates a singly linked list consist of random prime numbers from start to end (both start and end included) with length of count and returns the head of the singly linked list.

def isPrime(n:int):
    if n<=3 and n>1:
        return 1
    if n%2==0 or n%3==0:
        return 0
    i=5
    while i*i<n:
        if n%i==0 or n%(i+2)==0:
            return False
        i+=6
    return True

def randPrimeSLL(start:int, end:int, count:int = 1):
    arr = []
    sll = SLL()
    for i in range(start,end+1):
        pval = i
        if pval<0:
            pval*=-1
        if isPrime(pval):
            arr.append(i)
    for _ in range(count):
        sll.insertEnd(random.choice(arr))
    return sll.head

random => alphabets (uppercase, lowercase, both uppercase and lowercase)

randAlphaSLL() takes parameters type (type of alphabet), count (number of elements in the linked list, default 1). This function generates a singly linked list consist of random alphabets with length of count and returns the head of the singly linked list. Parameter type takes 3 types of values (“UPPER”, “LOWER”, “MIXED”). “UPPER” for only upper case alphabets. “LOWER” for only lower case alphabets. “MIXED” for both upper and lower case alphabets.

def randAlphaSLL(type:str, count:int = 1):
    LCASE = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    sll = SLL()
    if type == "UPPER":
        for _ in range(count):
            sll.insertEnd(random.choice(LCASE).upper())
    elif type == "LOWER":
        for _ in range(count):
            sll.insertEnd(random.choice(LCASE))
    elif type == "MIXED":
        for _ in range(count):
            rval = random.choice(LCASE)
            if random.choice([True,False]):
                rval = rval.upper()
            sll.insertEnd(rval)
    return sll.head

Example

import randomSLL

def display(head):
    curr = head
    while curr:
        print(curr.val,end=" ")
        curr = curr.next
    print()

headRand = randomSLL.randSLL(1, 10, 5)
headRandOdd = randomSLL.randOddSLL(1, 20, 5)
headRandEven = randomSLL.randEvenSLL(1, 20, 5)
headRandPrime = randomSLL.randPrimeSLL(1, 20, 5)
headRandUpper = randomSLL.randAlphaSLL("UPPER", 10);
headRandLower = randomSLL.randAlphaSLL("LOWER", 10);
headRandMixed = randomSLL.randAlphaSLL("MIXED", 10);

print("Random Singly Linked List")
display(headRand)
print("Random Singly Linked List - Odd")
display(headRandOdd)
print("Random Singly Linked List - Even")
display(headRandEven)
print("Random Singly Linked List - Prime")
display(headRandPrime)
print("Random Singly Linked List - Uppercase")
display(headRandUpper)
print("Random Singly Linked List - Lowercase")
display(headRandLower)
print("Random Singly Linked List - both Uppercase and Lowercase")
display(headRandMixed)

Output for above example

Random Singly Linked List
1 7 6 7 3
Random Singly Linked List - Odd
7 5 9 15 11
Random Singly Linked List - Even
20 14 10 18 16
Random Singly Linked List - Prime
7 19 11 13 13
Random Singly Linked List - Uppercase
R G V Y S Z O T N P
Random Singly Linked List - Lowercase
n x e i o t f f n w
Random Singly Linked List - both Uppercase and Lowercase
l O V a r I k D M V

Leave a Reply

Your email address will not be published.