File tree 11 files changed +530
-682
lines changed
solution/0000-0099/0025.Reverse Nodes in k-Group
11 files changed +530
-682
lines changed Load Diff Large diffs are not rendered by default.
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change
1
+ /* *
2
+ * Definition for singly-linked list.
3
+ * struct ListNode {
4
+ * int val;
5
+ * ListNode *next;
6
+ * ListNode() : val(0), next(nullptr) {}
7
+ * ListNode(int x) : val(x), next(nullptr) {}
8
+ * ListNode(int x, ListNode *next) : val(x), next(next) {}
9
+ * };
10
+ */
11
+ class Solution {
12
+ public:
13
+ ListNode* reverseKGroup (ListNode* head, int k) {
14
+ ListNode* dummy = new ListNode (0 , head);
15
+ ListNode* pre = dummy;
16
+
17
+ while (pre != nullptr ) {
18
+ ListNode* cur = pre;
19
+ for (int i = 0 ; i < k; i++) {
20
+ cur = cur->next ;
21
+ if (cur == nullptr ) {
22
+ return dummy->next ;
23
+ }
24
+ }
25
+
26
+ ListNode* node = pre->next ;
27
+ ListNode* nxt = cur->next ;
28
+ cur->next = nullptr ;
29
+ pre->next = reverse (node);
30
+ node->next = nxt;
31
+ pre = node;
32
+ }
33
+ return dummy->next ;
34
+ }
35
+
36
+ private:
37
+ ListNode* reverse (ListNode* head) {
38
+ ListNode* dummy = new ListNode ();
39
+ ListNode* cur = head;
40
+ while (cur != nullptr ) {
41
+ ListNode* nxt = cur->next ;
42
+ cur->next = dummy->next ;
43
+ dummy->next = cur;
44
+ cur = nxt;
45
+ }
46
+ return dummy->next ;
47
+ }
48
+ };
Original file line number Diff line number Diff line change 3
3
* public class ListNode {
4
4
* public int val;
5
5
* public ListNode next;
6
- * public ListNode(int val= 0, ListNode next= null) {
6
+ * public ListNode(int val = 0, ListNode next = null) {
7
7
* this.val = val;
8
8
* this.next = next;
9
9
* }
10
10
* }
11
11
*/
12
12
public class Solution {
13
13
public ListNode ReverseKGroup ( ListNode head , int k ) {
14
- ListNode dummy = new ListNode ( 0 , head ) ;
15
- ListNode pre = dummy , cur = dummy ;
16
- while ( cur . next != null )
17
- {
18
- for ( int i = 0 ; i < k && cur != null ; ++ i )
19
- {
14
+ var dummy = new ListNode ( 0 ) ;
15
+ dummy . next = head ;
16
+ var pre = dummy ;
17
+
18
+ while ( pre != null ) {
19
+ var cur = pre ;
20
+ for ( int i = 0 ; i < k ; i ++ ) {
21
+ if ( cur . next == null ) {
22
+ return dummy . next ;
23
+ }
20
24
cur = cur . next ;
21
25
}
22
- if ( cur == null )
23
- {
24
- return dummy . next ;
25
- }
26
- ListNode t = cur . next ;
26
+
27
+ var node = pre . next ;
28
+ var nxt = cur . next ;
27
29
cur . next = null ;
28
- ListNode start = pre . next ;
29
- pre . next = ReverseList ( start ) ;
30
- start . next = t ;
31
- pre = start ;
32
- cur = pre ;
30
+ pre . next = Reverse ( node ) ;
31
+ node . next = nxt ;
32
+ pre = node ;
33
33
}
34
+
34
35
return dummy . next ;
35
36
}
36
37
37
- private ListNode ReverseList ( ListNode head ) {
38
- ListNode pre = null , p = head ;
39
- while ( p != null )
40
- {
41
- ListNode q = p . next ;
42
- p . next = pre ;
43
- pre = p ;
44
- p = q ;
38
+ private ListNode Reverse ( ListNode head ) {
39
+ ListNode prev = null ;
40
+ var cur = head ;
41
+ while ( cur != null ) {
42
+ var nxt = cur . next ;
43
+ cur . next = prev ;
44
+ prev = cur ;
45
+ cur = nxt ;
45
46
}
46
- return pre ;
47
+ return prev ;
47
48
}
48
49
}
Original file line number Diff line number Diff line change 6
6
* }
7
7
*/
8
8
func reverseKGroup (head * ListNode , k int ) * ListNode {
9
- var dummy * ListNode = & ListNode {}
10
- p , cur := dummy , head
11
- for cur != nil {
12
- start := cur
9
+ dummy := & ListNode {Next : head }
10
+ pre := dummy
11
+
12
+ for pre != nil {
13
+ cur := pre
13
14
for i := 0 ; i < k ; i ++ {
15
+ cur = cur .Next
14
16
if cur == nil {
15
- p .Next = start
16
17
return dummy .Next
17
18
}
18
- cur = cur .Next
19
19
}
20
- p .Next , p = reverse (start , cur ), start
20
+
21
+ node := pre .Next
22
+ nxt := cur .Next
23
+ cur .Next = nil
24
+ pre .Next = reverse (node )
25
+ node .Next = nxt
26
+ pre = node
21
27
}
22
28
return dummy .Next
23
29
}
24
30
25
- func reverse (start , end * ListNode ) * ListNode {
26
- var pre * ListNode = nil
27
- for start != end {
28
- tmp := start .Next
29
- start .Next , pre = pre , start
30
- start = tmp
31
+ func reverse (head * ListNode ) * ListNode {
32
+ var dummy * ListNode
33
+ cur := head
34
+ for cur != nil {
35
+ nxt := cur .Next
36
+ cur .Next = dummy
37
+ dummy = cur
38
+ cur = nxt
31
39
}
32
- return pre
33
- }
40
+ return dummy
41
+ }
Original file line number Diff line number Diff line change 11
11
class Solution {
12
12
public ListNode reverseKGroup (ListNode head , int k ) {
13
13
ListNode dummy = new ListNode (0 , head );
14
- ListNode pre = dummy , cur = dummy ;
15
- while (cur .next != null ) {
16
- for (int i = 0 ; i < k && cur != null ; ++i ) {
14
+ dummy .next = head ;
15
+ ListNode pre = dummy ;
16
+ while (pre != null ) {
17
+ ListNode cur = pre ;
18
+ for (int i = 0 ; i < k ; i ++) {
17
19
cur = cur .next ;
20
+ if (cur == null ) {
21
+ return dummy .next ;
22
+ }
18
23
}
19
- if (cur == null ) {
20
- return dummy .next ;
21
- }
22
- ListNode t = cur .next ;
24
+ ListNode node = pre .next ;
25
+ ListNode nxt = cur .next ;
23
26
cur .next = null ;
24
- ListNode start = pre .next ;
25
- pre .next = reverseList (start );
26
- start .next = t ;
27
- pre = start ;
28
- cur = pre ;
27
+ pre .next = reverse (node );
28
+ node .next = nxt ;
29
+ pre = node ;
29
30
}
30
31
return dummy .next ;
31
32
}
32
33
33
- private ListNode reverseList (ListNode head ) {
34
- ListNode pre = null , p = head ;
35
- while (p != null ) {
36
- ListNode q = p .next ;
37
- p .next = pre ;
38
- pre = p ;
39
- p = q ;
34
+ private ListNode reverse (ListNode head ) {
35
+ ListNode dummy = new ListNode ();
36
+ ListNode cur = head ;
37
+ while (cur != null ) {
38
+ ListNode nxt = cur .next ;
39
+ cur .next = dummy .next ;
40
+ dummy .next = cur ;
41
+ cur = nxt ;
40
42
}
41
- return pre ;
43
+ return dummy . next ;
42
44
}
43
- }
45
+ }
Original file line number Diff line number Diff line change 1
- # Definition for singly - linked list .
2
- # class ListNode {
3
- # public $val ;
4
- # public $next ;
5
- # public function __construct ( $val = 0 , $ next = null )
6
- # {
7
- # $this -> val = $val ;
8
- # $this -> next = $next ;
9
- # }
10
- # }
11
-
1
+ /**
2
+ * Definition for a singly-linked list.
3
+ * class ListNode {
4
+ * public $val = 0 ;
5
+ * public $ next = null;
6
+ * function __construct($val = 0, $next = null) {
7
+ * $this->val = $val;
8
+ * $this->next = $next;
9
+ * }
10
+ * }
11
+ */
12
12
class Solution {
13
13
/**
14
14
* @param ListNode $head
15
- * @param int $k
15
+ * @param Integer $k
16
16
* @return ListNode
17
17
*/
18
-
19
18
function reverseKGroup($head, $k) {
20
19
$dummy = new ListNode(0);
21
20
$dummy->next = $head;
22
- $prevGroupTail = $dummy ;
21
+ $pre = $dummy;
23
22
24
- while ($head !== null ) {
25
- $count = 0 ;
26
- $groupHead = $head ;
27
- $groupTail = $head ;
28
-
29
- while ($count < $k && $head !== null ) {
30
- $head = $head -> next ;
31
- $count ++ ;
32
- }
33
- if ($count < $k ) {
34
- $prevGroupTail -> next = $groupHead ;
35
- break ;
36
- }
37
-
38
- $prev = null ;
23
+ while ($pre !== null) {
24
+ $cur = $pre;
39
25
for ($i = 0; $i < $k; $i++) {
40
- $next = $groupHead -> next ;
41
- $groupHead -> next = $prev ;
42
- $prev = $groupHead ;
43
- $groupHead = $next ;
26
+ if ($cur ->next === null) {
27
+ return $dummy ->next;
28
+ }
29
+ $cur = $cur-> next;
44
30
}
45
- $prevGroupTail -> next = $prev ;
46
- $prevGroupTail = $groupTail ;
31
+
32
+ $node = $pre->next;
33
+ $nxt = $cur->next;
34
+ $cur->next = null;
35
+ $pre->next = $this->reverse($node);
36
+ $node->next = $nxt;
37
+ $pre = $node;
47
38
}
48
39
49
40
return $dummy->next;
50
41
}
42
+
43
+ /**
44
+ * Helper function to reverse a linked list.
45
+ * @param ListNode $head
46
+ * @return ListNode
47
+ */
48
+ function reverse($head) {
49
+ $prev = null;
50
+ $cur = $head;
51
+ while ($cur !== null) {
52
+ $nxt = $cur->next;
53
+ $cur->next = $prev;
54
+ $prev = $cur;
55
+ $cur = $nxt;
56
+ }
57
+ return $prev;
58
+ }
51
59
}
Original file line number Diff line number Diff line change 4
4
# self.val = val
5
5
# self.next = next
6
6
class Solution :
7
- def reverseKGroup (self , head : ListNode , k : int ) -> ListNode :
8
- def reverseList (head ):
9
- pre , p = None , head
10
- while p :
11
- q = p .next
12
- p .next = pre
13
- pre = p
14
- p = q
15
- return pre
7
+ def reverseKGroup (self , head : Optional [ListNode ], k : int ) -> Optional [ListNode ]:
8
+ def reverse (head : Optional [ListNode ]) -> Optional [ListNode ]:
9
+ dummy = ListNode ()
10
+ cur = head
11
+ while cur :
12
+ nxt = cur .next
13
+ cur .next = dummy .next
14
+ dummy .next = cur
15
+ cur = nxt
16
+ return dummy .next
16
17
17
- dummy = ListNode (next = head )
18
- pre = cur = dummy
19
- while cur . next :
18
+ dummy = pre = ListNode (next = head )
19
+ while pre :
20
+ cur = pre
20
21
for _ in range (k ):
21
22
cur = cur .next
22
23
if cur is None :
23
24
return dummy .next
24
- t = cur .next
25
+ node = pre .next
26
+ nxt = cur .next
25
27
cur .next = None
26
- start = pre .next
27
- pre .next = reverseList (start )
28
- start .next = t
29
- pre = start
30
- cur = pre
28
+ pre .next = reverse (node )
29
+ node .next = nxt
30
+ pre = node
31
31
return dummy .next
You can’t perform that action at this time.
0 commit comments