-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSingleLinkedList.test.ts
151 lines (139 loc) · 5.29 KB
/
SingleLinkedList.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import SingleLinked from './SingleLinked';
import { describe, test } from '@jest/globals';
import Node from '../00_common/Node';
describe('test single linked list operation', () => {
test('should append a given node ', () => {
const singleLinkedList = new SingleLinked();
singleLinkedList.append(new Node('1'));
const result = singleLinkedList.getData();
expect(result).toBe('1');
});
test('should find a given node', () => {
const singleLinked = new SingleLinked();
const node = new Node('2');
singleLinked.append(node);
const findNode = singleLinked.findByValue(node);
expect(findNode).toBe(node);
});
test('should remove a give node', () => {
const singleLinked = new SingleLinked();
const node = new Node('2');
singleLinked.append(node);
singleLinked.append(new Node('3'));
singleLinked.remove(node);
const result = singleLinked.getData();
expect(result).toBe('3');
});
test('should insert node before a given value', () => {
const singleLinked = new SingleLinked();
const node = new Node('2');
singleLinked.append(node);
singleLinked.append(new Node('3'));
singleLinked.insert(new Node('4'), node);
const result = singleLinked.getData();
expect(result).toBe('4,2,3');
});
test('should reverse all node when call reverse', () => {
const singleLinked = new SingleLinked();
const node = new Node('2');
singleLinked.append(node);
singleLinked.append(new Node('3'));
singleLinked.append(new Node('4'));
singleLinked.reverse();
const result = singleLinked.getData();
expect(result).toBe('4,3,2');
});
test('should return true when given a single linked list cycle', () => {
const singleLinked = new SingleLinked();
singleLinked.append(new Node('1'));
singleLinked.append(new Node('2'));
const node3 = new Node('3');
singleLinked.append(node3);
singleLinked.append(new Node('4'));
singleLinked.append(new Node('5'));
singleLinked.append(new Node('6'));
singleLinked.append(new Node('7'));
const node8 = new Node('8');
singleLinked.append(node8);
node8.next = node3;
const result = singleLinked.checkCycleStart();
expect(result).toBe('3');
});
test('should merge sorted linked list when call mergeSortedList', () => {
const singleLinked1 = new SingleLinked();
singleLinked1.append(new Node('1'));
singleLinked1.append(new Node('2'));
singleLinked1.append(new Node('4'));
const singleLinked2 = new SingleLinked();
singleLinked2.append(new Node('1'));
singleLinked2.append(new Node('3'));
singleLinked2.append(new Node('4'));
const result = singleLinked1.mergeSortedList(
singleLinked1,
singleLinked2,
);
expect(result).toEqual({
data: 'head',
next: {
data: '1',
next: {
data: '1',
next: {
data: '2',
next: {
data: '3',
next: {
data: '4',
next: { data: '4', next: null },
},
},
},
},
},
});
});
test('should delete the penultimate node when call deleteByLastIndex', () => {
const singleLinked = new SingleLinked();
singleLinked.append(new Node('1'));
singleLinked.append(new Node('2'));
singleLinked.append(new Node('3'));
singleLinked.append(new Node('4'));
singleLinked.append(new Node('5'));
singleLinked.append(new Node('6'));
singleLinked.deleteByLastIndex(4);
const result = singleLinked.getData();
expect(result).toBe('1,2,5,6');
});
test('should return middle value when call findMiddleValue', () => {
const singleLinked = new SingleLinked();
singleLinked.append(new Node('1'));
singleLinked.append(new Node('2'));
singleLinked.append(new Node('3'));
singleLinked.append(new Node('4'));
singleLinked.append(new Node('5'));
singleLinked.append(new Node('6'));
const result = singleLinked.findMiddleValue();
expect(result).toEqual({
data: '3',
next: {
data: '4',
next: { data: '5', next: { data: '6', next: null } },
},
});
});
test('should empty when clear link', () => {
const singleLinked = new SingleLinked();
singleLinked.append(new Node('1'));
singleLinked.append(new Node('2'));
singleLinked.clearLink();
expect(singleLinked.getData()).toEqual(null);
});
test('should remove first node when call `removeFirstNode`', () => {
const singleLinked = new SingleLinked();
singleLinked.append(new Node('1'));
singleLinked.append(new Node('2'));
singleLinked.removeFirstNode();
const result = singleLinked.getData();
expect(result).toEqual('2');
});
});