-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path86_partition_list.js
69 lines (64 loc) · 1.59 KB
/
86_partition_list.js
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
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function (head, x) {
if (!head) {
return head;
}
let listOfLessList = [];
let listOfGratorButBefore = [];
let listOfEqual = [];
let listOfRemaining = [];
let isXpassed = false;
let dummyHead = new ListNode();
dummyHead = head;
while(dummyHead) {
if (dummyHead.val < x) {
listOfLessList.push(dummyHead.val);
} else if (!isXpassed && dummyHead.val === x) {
isXpassed = true;
listOfEqual.push(dummyHead.val);
} else if (!isXpassed && dummyHead.val > x) {
listOfGratorButBefore.push(dummyHead.val);
} else {
listOfRemaining.push(dummyHead.val);
}
dummyHead = dummyHead.next;
}
dummyHead = null;
const commonSetter = (mapKey) => {
if (!dummyHead || (!dummyHead.val && dummyHead.val !== 0)) {
dummyHead = new ListNode();
dummyHead.val = mapKey;
} else {
let newDummy = dummyHead;
while(newDummy.next) {
newDummy = newDummy.next;
}
newDummy.next = new ListNode();
newDummy.next.val = mapKey
}
}
listOfLessList.forEach((mapKey) => {
commonSetter(mapKey);
})
listOfGratorButBefore.forEach((mapKey) => {
commonSetter(mapKey);
})
listOfEqual.forEach((mapKey) => {
commonSetter(mapKey);
})
listOfRemaining.forEach((mapKey) => {
commonSetter(mapKey);
})
return dummyHead;
};