leetcode/25_reverse_nodes_in_k_group
25_reverse_nodes_in_k_group
dz /
leetcode /
25_reverse_nodes_in_k_group
Summary
25. Reverse Nodes in K Group. Given the head of a linked list, reverse the nodes of the list k at a time, and return the modified list. k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is. You may not alter the values in the list's nodes, only nodes themselves may be changed.
Node Tree
Nodes
intuition
|
content
|
Thinking about a linked list in terms of chunks/blocks of size k. A block can be defined in terms of the start and end node. A reverse operation on a block updates the links to be reverse flow, the start becomes the end and then becomes the start. These start/end blocks then need to be properly linked to the neighboring blocks, the previous end points to the current start.
|
children
|
forgot_about_the_new_head (detail I forgot), how_to_use_dummy_node, approach_2_iterative (similar to what I thought of)
|
approximate_algorithm
|
content
|
Start with the head, set to start. In a loop, iterate k times to get start/end. If no null, found, reverse segment with start/end, and swap. Link previous end to start. Set current end to previous. If null was found in current block, break.
|
children
|
reverse_list
|
reverse_list
|
content
|
There are multiple ways to reverse a linked list. Since k is rather large (5000), using a stack-based recursion approach is probably out of the question. A->B->C->D becomes A<-B<-C<-D. So, this should be able to be done in pairs iteratively.
|
parents
|
approximate_algorithm
|
approach_1_recursion
|
content
|
Approach 1 is recursion (even though there's a space constraint). Basically start with a head, and reverse-append. There are two pointers to keep track of. "head" pointer is passed to the function call. "rev-head" is something that recursion will return to the caller. User a counter to keep track of k nodes and break when it reaches k.
|
children
|
recursion_works_well_for_linked_lists
|
parents
|
editorial
|
approach_2_iterative
|
content
|
Instead of using the stack and imagining the problem recursively, introduce a few new variables. In addition to =rev= and =rev_head=, also include =ktail=, the tail of the previous k nodes after reversal, and =new_head=, the head of the final list after output.
|
children
|
forgot_about_the_new_head
|
parents
|
intuition
|