1+ /**
2+ * Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
3+ *
4+ * You should preserve the original relative order of the nodes in each of the two partitions.
5+ *
6+ * For example,
7+ * Given 1->4->3->2->5->2 and x = 3,
8+ * return 1->2->2->4->3->5.
9+ *
10+ * Accepted.
11+ */
12+
13+ function ListNode ( val ) {
14+ this . val = val ;
15+ this . next = null ;
16+
17+ this . equals = function ( node ) {
18+ return this . next == null && node . next == null || this . val === node . val && ( this . next != null ) && this . next . equals ( node . next ) ;
19+ }
20+ }
21+
22+ /**
23+ * @param {ListNode } head
24+ * @param {number } x
25+ * @return {ListNode }
26+ */
27+ let partition = function ( head , x ) {
28+ let node = head , greater = null , greaterHead = null , less = null , lessHead = null ;
29+
30+ while ( node != null ) {
31+ if ( node . val < x ) {
32+ if ( less == null ) {
33+ less = new ListNode ( node . val ) ;
34+ lessHead = less ;
35+ } else {
36+ less . next = new ListNode ( node . val ) ;
37+ less = less . next ;
38+ }
39+ } else {
40+ if ( greater == null ) {
41+ greater = new ListNode ( node . val ) ;
42+ greaterHead = greater ;
43+ } else {
44+ greater . next = new ListNode ( node . val ) ;
45+ greater = greater . next ;
46+ }
47+ }
48+
49+ node = node . next ;
50+ }
51+
52+ if ( greaterHead == null ) {
53+ return lessHead ;
54+ } else if ( lessHead == null ) {
55+ return greaterHead ;
56+ }
57+
58+ less . next = greaterHead ;
59+ return lessHead ;
60+ } ;
61+
62+
63+ if ( partition ( null , 2 ) == null ) {
64+ console . log ( "pass" )
65+ } else {
66+ console . error ( "failed" )
67+ }
68+
69+ let node12 = new ListNode ( 1 ) ;
70+ node12 . next = new ListNode ( 2 ) ;
71+ let tmp = new ListNode ( 1 ) ;
72+ tmp . next = new ListNode ( 2 ) ;
73+ if ( partition ( node12 , 3 ) . equals ( tmp ) ) {
74+ console . log ( "pass" )
75+ } else {
76+ console . error ( "failed" )
77+ }
78+
79+ if ( partition ( node12 , 0 ) . equals ( tmp ) ) {
80+ console . log ( "pass" )
81+ } else {
82+ console . error ( "failed" )
83+ }
84+
85+ let node143252 = new ListNode ( 1 ) ;
86+ node143252 . next = new ListNode ( 4 ) ;
87+ node143252 . next . next = new ListNode ( 3 ) ;
88+ node143252 . next . next . next = new ListNode ( 2 ) ;
89+ node143252 . next . next . next . next = new ListNode ( 5 ) ;
90+ node143252 . next . next . next . next . next = new ListNode ( 2 ) ;
91+ tmp = new ListNode ( 1 ) ;
92+ tmp . next = new ListNode ( 2 ) ;
93+ tmp . next . next = new ListNode ( 2 ) ;
94+ tmp . next . next . next = new ListNode ( 4 ) ;
95+ tmp . next . next . next . next = new ListNode ( 3 ) ;
96+ tmp . next . next . next . next . next = new ListNode ( 5 ) ;
97+ if ( partition ( node143252 , 3 ) . equals ( tmp ) ) {
98+ console . log ( "pass" )
99+ } else {
100+ console . error ( "failed" )
101+ }
102+
103+ tmp = new ListNode ( 1 ) ;
104+ tmp . next = new ListNode ( 3 ) ;
105+ tmp . next . next = new ListNode ( 2 ) ;
106+ tmp . next . next . next = new ListNode ( 2 ) ;
107+ tmp . next . next . next . next = new ListNode ( 4 ) ;
108+ tmp . next . next . next . next . next = new ListNode ( 5 ) ;
109+ if ( partition ( node143252 , 4 ) . equals ( tmp ) ) {
110+ console . log ( "pass" )
111+ } else {
112+ console . error ( "failed" )
113+ }
0 commit comments