Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests passing. functions descriptions/tests could be more clear. #11

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions solution.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,135 @@
const { nums, words } = require("./data/data.js");


class Node {
constructor(data){
this.data = data
this.next = null
}
}

class LinkedList{
constructor(head = null){
this.head = head
}
// - `insert`
insert(val){
const newNode = new Node(val)
const curr = this.head
this.head = newNode
newNode.next = curr
}
// - `size`
size(){
let curr = this.head

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you think of a way to have this function run in O(1) instead of O(n)?

let count = 0
while(curr){
count++
curr = curr.next
}
return count
}
// - `delete` by key

//not sure if key is value of data or the index in the list. Wish it was more discriptive/clear
delete(key){
if(!key){
this.head = this.head.next
}else{
let c = 1
let prev = this.head
let curr = this.head.next
let next
while(c <= key){
if(c === key){
prev.next = curr.next
}
c++
next = curr.next
prev = curr
curr = next
}
}
}
// - `getFirst` element
getFirst(){
return this.head
}
// - `getLast` element
getLast(){
let curr = this.head
while(curr.next){
curr = curr.next
}
return curr
}
// - `search` an element by key and return data const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0];
search(key){
let curr = this.head
while(curr){
if(curr.data === key){
return curr
}
curr=curr.next
}
}
// - `getKth` retrieve kth element
getKth(key){
let curr = this.head
let c = 1
while(curr){
if(c === key){
return curr
}
curr=curr.next
c++
}
}
// - `getKthToLast` retrieve kth from last element
getKthToLast(k){
let index = this.size() - k
let curr = this.head
while(curr){
if(index==1){
return curr
}
curr = curr.next
index--
}
}
// - `isEmpty` check if list is empty
isEmpty(){
return this.head === null
}
// - `clear` the linked list
clear(){
this.head = null
}
// - `toArray`convert data from linked list to an array
toArray(){
let curr = this.head
const arr = []
while(curr){
arr.push(curr.data)
curr = curr.next
}
return arr
}
// - `containsDuplicates` check for duplicates - return true if contains duplicates, false if not
containsDuplicates(){
let curr = this.head

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using a set you could compare the length of the set to the length of the linked list for shorter, cleaner code

let set = new Set()
while(curr){
if(!set.has(curr.data)){
set.add(curr.data)
curr = curr.next
}else{
return true
}
}
return false
}
}
module.exports = {
Node,
LinkedList,
Expand Down