Advertisement
Guest User

Untitled

a guest
Oct 18th, 2021
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. // Reverse k node of linked list
  2.  
  3. // Assume have at least k knode
  4.  
  5. ListNode* reverseLinkedList(ListNode* head, int k) {
  6.  
  7. ListNode *rev_head = nullptr;
  8.  
  9. ListNode *ptr = head;
  10.  
  11. while (k > 0) {
  12.  
  13. ListNode *next_node = ptr->next;
  14.  
  15. ptr->next = rev_head;
  16.  
  17. rev_head = ptr;
  18.  
  19. ptr = next_node;
  20.  
  21. k--;
  22.  
  23. }
  24.  
  25. return rev_head;
  26.  
  27. }
  28.  
  29.  
  30.  
  31. ListNode* reverseKGroup(ListNode* head, int k) {
  32.  
  33. int count = 0;
  34.  
  35. ListNode* ptr = head;
  36.  
  37.  
  38.  
  39. // Check if there is atleast k nodes left in the linked list
  40.  
  41. while (count < k && ptr != nullptr) {
  42.  
  43. ptr = ptr->next;
  44.  
  45. count++;
  46.  
  47. }
  48.  
  49.  
  50.  
  51. // Reverse if we have k node
  52.  
  53. if (count == k) {
  54.  
  55. // Reverse first k node
  56.  
  57. // Get the reverse list head
  58.  
  59. auto reverseHead = reverseLinkedList(head, k);
  60.  
  61. // Recurse on the remaing linked list
  62.  
  63. head->next = reverseKGroup(ptr, k);
  64.  
  65. return reverseHead;
  66.  
  67. }
  68.  
  69. return head;
  70.  
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement