File tree Expand file tree Collapse file tree 11 files changed +530
-682
lines changed
solution/0000-0099/0025.Reverse Nodes in k-Group Expand file tree Collapse file tree 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 33 * public class ListNode {
44 * public int val;
55 * public ListNode next;
6- * public ListNode(int val= 0, ListNode next= null) {
6+ * public ListNode(int val = 0, ListNode next = null) {
77 * this.val = val;
88 * this.next = next;
99 * }
1010 * }
1111 */
1212public class Solution {
1313 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+ }
2024 cur = cur . next ;
2125 }
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 ;
2729 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 ;
3333 }
34+
3435 return dummy . next ;
3536 }
3637
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 ;
4546 }
46- return pre ;
47+ return prev ;
4748 }
4849}
Original file line number Diff line number Diff line change 66 * }
77 */
88func 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
1314 for i := 0 ; i < k ; i ++ {
15+ cur = cur .Next
1416 if cur == nil {
15- p .Next = start
1617 return dummy .Next
1718 }
18- cur = cur .Next
1919 }
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
2127 }
2228 return dummy .Next
2329}
2430
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
3139 }
32- return pre
33- }
40+ return dummy
41+ }
Original file line number Diff line number Diff line change 1111class Solution {
1212 public ListNode reverseKGroup (ListNode head , int k ) {
1313 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 ++) {
1719 cur = cur .next ;
20+ if (cur == null ) {
21+ return dummy .next ;
22+ }
1823 }
19- if (cur == null ) {
20- return dummy .next ;
21- }
22- ListNode t = cur .next ;
24+ ListNode node = pre .next ;
25+ ListNode nxt = cur .next ;
2326 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 ;
2930 }
3031 return dummy .next ;
3132 }
3233
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 ;
4042 }
41- return pre ;
43+ return dummy . next ;
4244 }
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+ */
1212class Solution {
1313 /**
1414 * @param ListNode $head
15- * @param int $k
15+ * @param Integer $k
1616 * @return ListNode
1717 */
18-
1918 function reverseKGroup($head, $k) {
2019 $dummy = new ListNode(0);
2120 $dummy->next = $head;
22- $prevGroupTail = $dummy ;
21+ $pre = $dummy;
2322
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;
3925 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;
4430 }
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;
4738 }
4839
4940 return $dummy->next;
5041 }
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+ }
5159}
Original file line number Diff line number Diff line change 44# self.val = val
55# self.next = next
66class 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
1617
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
2021 for _ in range (k ):
2122 cur = cur .next
2223 if cur is None :
2324 return dummy .next
24- t = cur .next
25+ node = pre .next
26+ nxt = cur .next
2527 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
3131 return dummy .next
You can’t perform that action at this time.
0 commit comments