Assignment for CS110
Linked Lists
1. Add Two Numbers Represented by Linked Lists
Problem Statement
You are given two non-empty linked lists representing two non-negative integers. The digits are
stored in reverse order, and each of their nodes contains a single digit. Your task is to create
these two linked lists based on the input, then compute their sum and store the result in a new
linked list. Finally, print the resulting linked list.
Instructions
● First, create the first linked list from the given input digits
● Then, create the second linked list from its input digits
● Add the two numbers represented by the linked lists
● Store the sum in a new linked list (in reverse order)
● Print the resulting linked list
Input
Two sequences of digits representing the numbers in reverse order.
Each digit is stored in a separate node in a singly linked list.
Output
Print the resulting linked list representing the sum of the two numbers, also in reverse order.
Example 1
Input
l1 = [2, 4, 3]
l2 = [5, 6, 4]
Output
708
Explanation
342 + 465 = 807
The result is stored in reverse as 7 0 8
Example 2
Input
l1 = [0]
l2 = [0]
Output
0
Example 3
Input
l1 = [9, 9, 9, 9, 9, 9, 9]
l2 = [9, 9, 9, 9]
Output
89990001
Constraints
● 1 <= length of each linked list <= 100
● Each digit is between 0 and 9
● The input does not contain leading zeros, except for the number 0 itself
2.Rotate a Linked List to the Right by k Places
Problem Statement
You are given the head of a singly linked list. Rotate the list to the right by k places. That
means each node moves k positions forward, and the nodes at the end wrap around to the
beginning.
Instructions
● First, create a linked list from the input values
● Then rotate the list to the right by k positions
● Print the final rotated list
Input
● A singly linked list
● An integer k, the number of rotations
Output
Print the resulting linked list after rotating it k places to the right
Example 1
Input
head = [1, 2, 3, 4, 5], k = 2
Output
45123
Example 2
Input
head = [0, 1, 2], k = 4
Output
201
Explanation
In the second example, k is greater than the list length, so you rotate the list by k % length
positions
Constraints
● 0 <= number of nodes <= 500
● -100 <= value of each node <= 100
● 0 <= k <= 2 billion
Stack
1.Stack Operations – Build Target Array
You are given an integer array target and an integer n.
You have an empty stack with the two following operations:
● "Push": pushes an integer to the top of the stack.
● "Pop": removes the integer on the top of the stack.
You also have a stream of the integers in the range [1, n].
Use the two stack operations to make the numbers in the stack (from the bottom to the top)
equal to target. You should follow the following rules:
● If the stream of the integers is not empty, pick the next integer from the stream and push
it to the top of the stack.
● If the stack is not empty, pop the integer at the top of the stack.
● If, at any moment, the elements in the stack (from the bottom to the top) are equal to
target, do not read new integers from the stream and do not do more operations on
the stack.
Print the stack operations needed to build target following the mentioned rules. If there are
multiple valid answers, print any of them.
Example 1:
Input: target = [1,3], n = 3
Output: ["Push","Push","Pop","Push"]
Explanation: Initially the stack s is empty. The last element is the top of the stack.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Pop the integer on the top of the stack. s = [1].
Read 3 from the stream and push it to the stack. s = [1,3].
Example 2:
Input: target = [1,2,3], n = 3
Output: ["Push","Push","Push"]
Explanation: Initially the stack s is empty.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Read 3 from the stream and push it to the stack. s = [1,2,3].
Example 3:
Input: target = [1,2], n = 4
Output: ["Push","Push"]
Explanation: Initially the stack s is empty.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Since the stack is equal to target, we stop. Reading 3 from the stream is not allowed.
2.Prefix to Postfix Conversion
Problem Statement
You are given a string that represents the prefix form of a valid mathematical expression. Your
task is to convert it to its equivalent postfix form and print the output.
You may assume:
● The expression contains only uppercase alphabets as operands (A to Z)
● Valid operators include +, -, *, and /
● The prefix expression is guaranteed to be valid
Input
A single string representing a prefix expression
Output
Print the equivalent postfix expression
Example 1
Input
*-A/BC-/AKL
Output
ABC/-AK/L-*
Explanation
The prefix expression -A/BC-/AKL becomes ABC/-AK/L- in postfix after placing operands and
operators according to postfix rules
Constraints
● Expression length is at most 100
● Only single-character operands
● The expression is syntactically correct and unambiguous
Queue
1. Implement First Unique Character in a Stream
Problem
You're given a stream of lowercase letters. At each point, print the first character that hasn’t
repeated yet.
Use a simple queue and frequency array.
Input
Stream: a a b c c d
Output
a -1 b b b d
2. Reverse First K Elements of Queue
Problem
Reverse the first k elements of the queue, keep the rest in order.
Use a stack for the first k and queue for the rest.
Input
Queue = 1 2 3 4 5, k = 3
Output
32145
Implementation of stack and queue using array
and linked list
1. Implement a Stack using Array
Problem
Implement a stack with the following operations using an array:
● push(int x)
● pop()
● peek()
● isEmpty()
● isFull()
Input Example
Push 10, 20, 30 → Pop → Peek
Output
Pushed: 10
Pushed: 20
Pushed: 30
Popped: 30
Top element: 20
2. Implement a Stack using Linked List
Problem
Use a singly linked list where each node contains an integer. Implement:
● push(int x)
● pop()
● peek()
● isEmpty()
Input Example
Push 5, 8 → Pop → Peek
Output
Pushed: 5
Pushed: 8
Popped: 8
Top element: 5
3. Implement Two Stacks in One Array
Problem
Use a single array to implement two stacks. Ensure no memory overlap.
Implement:
● push1, push2
● pop1, pop2
Input Example
push1(10), push2(20), push1(30), pop1()
Output
Stack1 push: 10
Stack2 push: 20
Stack1 push: 30
Stack1 pop: 30
4. Implement a Queue using Array
Problem
Use a circular array to implement a queue with:
● enqueue(int x)
● dequeue()
● peek()
● isEmpty(), isFull()
Input Example
Enqueue 1, 2, 3 → Dequeue → Peek
Output
Enqueued: 1
Enqueued: 2
Enqueued: 3
Dequeued: 1
Front: 2
5. Implement a Queue using Linked List
Problem
Use a linked list with front and rear pointers. Implement:
● enqueue(int x)
● dequeue()
● peek()
● isEmpty()
Input Example
Enqueue 11, 22 → Dequeue → Peek
Output
Enqueued: 11
Enqueued: 22
Dequeued: 11
Front: 22
6. Reverse a Queue using Stack
Problem
Given a queue, reverse its elements using a stack.
Input
Queue: 10 20 30 40
Output
Reversed: 40 30 20 10