-
Notifications
You must be signed in to change notification settings - Fork 0
/
initial.ts
103 lines (81 loc) · 2.61 KB
/
initial.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
/**
* Definition for singly-linked list.
**/
class ListNode {
val: number;
next: ListNode | null;
constructor(val: number = 0, next: ListNode | null = null) {
this.val = val;
this.next = next;
}
}
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
function push(new_data: number) {
let new_node = new ListNode(new_data);
new_node.next = head;
head = new_node;
return head;
}
function insertAfter(new_data: number) {
let new_node = new ListNode(new_data);
new_node.next = head.next;
head.next = new_node.next;
return head;
}
//Lưu ý rằng last chỉ là một tham chiếu đến nút trong danh sách, và việc thay đổi giá trị của last không làm thay đổi giá trị của head. Tuy nhiên, do last và head cùng trỏ đến cùng một danh sách liên kết, khi bạn thay đổi nút thông qua last, thì thực chất bạn đang thay đổi trực tiếp nút trong danh sách liên kết mà head cũng đang trỏ đến.
function append(new_data: number) {
let new_node = new ListNode(new_data);
new_node.next = null;
let last = head;
while (last.next != null) {
last = last.next;
}
last.next = new_node;
return head;
}
function reverse() {
if (head == null) return;
let prev: ListNode | null = null;
let current: ListNode | null = head;
while (current != null) {
const next: ListNode | null = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
function deleteNode(position: number) {
if (head == null || head.next == null) return;
let temp: ListNode = head;
if (position == 0) {
return temp.next;
}
//find previous node of the node to be deleted
for (let i = 0; temp != null && i < position - 1; i++) {
temp = head.next;
}
if (temp == null || temp.next == null) return
temp.next = temp.next.next;
return head;
}
//resulting in a total time complexity of O(n)
function findMiddleItem() {
if (head == null) return null;
if (head.next == null) return head.val;
//find the length of the head
let slowPoint: ListNode | null = head;
let highPoint: ListNode | null = head;
while (slowPoint.next != null && highPoint != null) {
slowPoint = slowPoint.next;
highPoint = highPoint?.next?.next ?? null;
}
return slowPoint.val;
}
const testing = findMiddleItem();
console.log(testing) ;
console.log('ffff');