L21. Reverse Nodes in K Group Size of LinkedList

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 พ.ย. 2023
  • Problem Link: tinyurl.com/4dbz8fnn
    Entire LL Sheet: takeuforward.org/linked-list/...
    Check our A2Z DSA Course: takeuforward.org/strivers-a2z...
    Please do give us a like, and subscribe to us if you are new to our channel.
    Do follow us on our socials: linktr.ee/takeuforward

ความคิดเห็น • 102

  • @udaypandey5659
    @udaypandey5659 8 หลายเดือนก่อน +70

    This question solution was already given by striver in past, but this latest one is very clear and easily understandable. This is a very good thing about him that he always upgrades his art of teaching and his content as well.

    • @alessandrocamilleri1239
      @alessandrocamilleri1239 6 หลายเดือนก่อน +8

      Yes. It is not about making a cookie cutter video to gain views. A lot of research goes in the production of these videos, mainly in planning the best and easiest approach for the viewer. The content is highly curated and the logic builds on preceeding videos. The man is a very good teacher who happens to know the subject really well.

  • @venub8853
    @venub8853 4 หลายเดือนก่อน +8

    What a fantastic explanation by breaking the problem into subparts!!!💥

  • @ankitsharda1131
    @ankitsharda1131 6 หลายเดือนก่อน +7

    Superb Explanation!! Didn't understood in the first watch but got it while watching for the second time!!

  • @CrazyHunk14
    @CrazyHunk14 4 หลายเดือนก่อน +7

    I was able to write almost the same code by myself thanks Striver!

  • @vasanthdamera5896
    @vasanthdamera5896 หลายเดือนก่อน +2

    just after listening once i had code the solution in one go and it executed perfectly.... great explanation by striver

  • @iayushsharma
    @iayushsharma 2 หลายเดือนก่อน +5

    You can also solve this question using recursion:
    Step 1: Base Case -> if LL is empty return null
    Step 2: Check do we even have k nodes to reverse if not you can return head(teh node itself).
    Step 3: Just reverse the first k group nodes and then leave everything on recursion.
    Step 4: return the head of the first LL that you have reversed.
    Below is the detailed code of c++:
    Code:
    ListNode* reverseKGroup(ListNode* head, int k) {
    // Recursive solution
    // Base Case
    if (head == nullptr) {
    return nullptr;
    }
    // step 1: Check if there are at least k nodes to reverse
    ListNode* temp = head;
    int count = 0;
    while (temp != nullptr && count < k) {
    temp = temp->next;
    count++;
    }
    // If there are fewer than k nodes left, return head without reversing
    if (count < k) {
    return head;
    }
    // Step 2 : reverse k nodes
    ListNode* prev = nullptr;
    temp = head;
    ListNode* next = nullptr;
    count = 0;
    while (temp != nullptr && count < k) {
    next = temp->next;
    temp->next = prev;
    prev = temp;
    temp = next;
    count++;
    }
    // recursive call;
    if (next != nullptr) {
    head->next = reverseKGroup(next, k);
    }
    // return
    return prev;
    }
    TC -> O(N)
    Sc -> O(N) -> recursive call stack memory

  • @shashankarora2945
    @shashankarora2945 18 วันที่ผ่านมา

    You made it look so easy. Absolutely FAB!

  • @ItsAbhiDestiny
    @ItsAbhiDestiny หลายเดือนก่อน +2

    understood bhaiya !! Amazing explaination

  • @hashcodez757
    @hashcodez757 22 วันที่ผ่านมา

    Mza aagya bhaiya!!
    suoerb explanation

  • @manojkumar-hr7tj
    @manojkumar-hr7tj 3 หลายเดือนก่อน

    Amazing explanation.

  • @anddevsahil
    @anddevsahil 3 วันที่ผ่านมา

    superb explanation

  • @pranjalnama2420
    @pranjalnama2420 2 หลายเดือนก่อน +1

    amazing explanation

  • @subhankarkanrar9494
    @subhankarkanrar9494 4 หลายเดือนก่อน

    Best explanation ❤

  • @gauravbairagi209
    @gauravbairagi209 8 หลายเดือนก่อน +1

    great video

  • @jyotirmaysingh4059
    @jyotirmaysingh4059 หลายเดือนก่อน +1

    wonderful solution
    '

  • @Oldmonk3321
    @Oldmonk3321 2 หลายเดือนก่อน +2

    DAY42:Got the intuition before starting this video
    😅failled in edgecase

  • @arnabkundu1648
    @arnabkundu1648 หลายเดือนก่อน +2

    We can also use dummyNode and at last return dummyNode->next

  • @user-tk2vg5jt3l
    @user-tk2vg5jt3l 5 หลายเดือนก่อน

    Thank you Bhaiya

  • @YourCodeVerse
    @YourCodeVerse 6 หลายเดือนก่อน

    Understood✅🔥🔥

  • @bishalkundu7592
    @bishalkundu7592 8 หลายเดือนก่อน +1

    Understood ❤

  • @myyoutubeisthis
    @myyoutubeisthis 2 หลายเดือนก่อน

    Thank you sir.

  • @hat_awesome21
    @hat_awesome21 8 หลายเดือนก่อน +18

    Bro stack and queue next 😢

    • @tonylee1868
      @tonylee1868 7 หลายเดือนก่อน

      Already hai bhai

  • @abhaythakur2597
    @abhaythakur2597 20 วันที่ผ่านมา

    well explained

  • @prathameshjadhav2942
    @prathameshjadhav2942 6 หลายเดือนก่อน

    Thanku ji

  • @ashishpradhan6250
    @ashishpradhan6250 หลายเดือนก่อน

    superb

  • @jha.brajesh
    @jha.brajesh 4 หลายเดือนก่อน

    Thanks for the great explanation Striver.
    Have one query at 21:14
    Even if we do not add if(prevNode != null), just "prevNode.next = temp" would also work fine.
    In that case null node will be pointing to head but that is fine, since we are returning head.

    • @ratulmanna2923
      @ratulmanna2923 2 หลายเดือนก่อน +1

      If prevNode is NULL, then prevNode->next will be NULL->next,.... That will eventually throw NULL POINTER EXCEPTION

  • @NARUTOUZUMAKI-bk4nx
    @NARUTOUZUMAKI-bk4nx 6 หลายเดือนก่อน

    Understooood

  • @invinciblearmyvlogsshorts7911
    @invinciblearmyvlogsshorts7911 6 หลายเดือนก่อน +2

    this got to be the hardest linked list question

    • @shankysays
      @shankysays 5 หลายเดือนก่อน

      Recursion se socho. It's not that difficult if solved recursively

  • @jk-sj4nf
    @jk-sj4nf 8 หลายเดือนก่อน +9

    hey can we expect strings / bit manipulation as next plz

  • @maverick_8707
    @maverick_8707 3 หลายเดือนก่อน

    UNDERSTOOOD

  • @rupendarkumar3003
    @rupendarkumar3003 4 หลายเดือนก่อน +1

    explained 100x times better than leetcode yt channel

  • @TheSpiritualOne401
    @TheSpiritualOne401 8 หลายเดือนก่อน +2

    yes pleaseeee striver bhaiyaa we need bit manipulation and strings as next playlist pleasssse bhaiyaa

    • @abacas2175
      @abacas2175 6 หลายเดือนก่อน

      Okay spoonfeeder😂

  • @nooblancer
    @nooblancer หลายเดือนก่อน

    with dummy node approach we will not have to remember previous nodes
    node * reverseKGroup(node * head, int k) {
    node * dummy = new node(-1, head);
    node * start = dummy, * end= nullptr;
    while(start->next != nullptr)
    {
    end = start->next;
    int n = k-1;
    while(end->next != nullptr && n--) //finding end
    end = end->next;
    if(n > 0) break; //if group cant be formed break out
    node * nextnode = end->next, * t = start->next; //remembering start, and preserving the next node
    end->next = nullptr; //breaking list
    node * temp = reverse(start->next); //reverse the LL using recursion
    t->next = nextnode; //joining the starting node to next node to the next node
    start->next = temp; //connecting with previous nodes
    start = t; //moving the start to end of current group
    }
    return dummy->next;
    }

  • @chiragbansod8252
    @chiragbansod8252 4 หลายเดือนก่อน

    understood

  • @hardikpatel352
    @hardikpatel352 2 หลายเดือนก่อน

    Understood

  • @shankysays
    @shankysays 5 หลายเดือนก่อน

    This is much complex implementation. Using recursion it can be done much easier way
    . Just reverse first three and call solve function again on rest or linked list. Base condition will be when list is exhausted or length is less than k.

    • @akshaychavan5511
      @akshaychavan5511 2 หลายเดือนก่อน

      Agree!
      I did it recursively.
      class Solution:
      # returns first node and last node of the revered list
      def reverse(self, head):
      if head == None: return None
      prev = None
      current = head
      while current:
      nxt = current.next
      current.next = prev
      prev = current
      current = nxt
      return (prev, head)
      def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
      if not head: return head
      kBackup = k
      newHead = head
      start = head
      while head:
      if k==1: # kth node found
      newHead = head
      nextListStart = head.next
      head.next = None # break the link
      first, last = self.reverse(start)
      last.next = self.reverseKGroup(nextListStart, kBackup) # recursively call for remaining list
      k-=1
      head = head.next
      return newHead

  • @himanshusekharnayak5558
    @himanshusekharnayak5558 7 หลายเดือนก่อน +4

    There is a slight problem in the code where prevLast is not able to connect with nextNode. I've introduced a newHead variable to store the head of the reversed group. Also, I added temp->next = nextNode; after reversing the linked list to connect the reversed group to the nextNode.
    while (temp != nullptr) {
    ListNode *kthNode = getKthNode(temp, k);
    if (kthNode == nullptr) {
    break;
    }
    ListNode *nextNode = kthNode->next;
    kthNode->next = nullptr;
    ListNode *newHead = reverseLL(temp);
    if (temp == head) {
    head = newHead;
    }
    else {
    prevNode->next = newHead;
    }
    temp->next = nextNode;
    prevNode = temp;
    temp = nextNode;
    }
    Thanks for this amazing video. I tried it in copy and saw links missing so made little changes so that links can be connected. Again thanks.

  • @az-zm4ji
    @az-zm4ji หลายเดือนก่อน +1

    Can be done by recursion(which is easier than striver's method - his is too messy)
    /**
    * Definition for singly-linked list.
    * struct ListNode {
    * int val;
    * ListNode *next;
    * ListNode() : val(0), next(nullptr) {}
    * ListNode(int x) : val(x), next(nullptr) {}
    * ListNode(int x, ListNode *next) : val(x), next(next) {}
    * };
    */
    class Solution {
    public:
    ListNode* reverseKsteps(ListNode* node, int k){
    //reverse the LL starting from node till k steps
    if(k == 1) return node;
    ListNode* prev = NULL;
    ListNode* curr = node;
    ListNode* next = node->next;
    ListNode* newHead;
    while(k--){
    curr->next = prev;
    prev = curr;
    curr = next;
    if(next) next = next->next;
    }
    newHead = prev;
    return newHead;
    }
    ListNode* solve(ListNode* node, int k){
    if(node == NULL) return node;
    int x = k;
    ListNode* temp = node;
    while(x--){
    if(temp == NULL) return node;
    temp = temp->next;
    }
    ListNode* headToBeJoined = solve(temp, k);
    ListNode* parentTail = node;
    ListNode* parentHead = reverseKsteps(node, k);
    parentTail->next = headToBeJoined;
    return parentHead;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
    return solve(head, k);
    }
    };

  • @anupkhismatrao9280
    @anupkhismatrao9280 4 หลายเดือนก่อน

    ❤❤❤

  • @dayashankarlakhotia4943
    @dayashankarlakhotia4943 8 หลายเดือนก่อน +9

    if(head==null) return head;
    Node prev=null,cur=head,next=null;
    int cnt=0;
    while(cur!=null&&cnt

    • @takeUforward
      @takeUforward  8 หลายเดือนก่อน +35

      It’s not always about writing the shortest code. A readable and self explanatory code is always preferred. Cheers!

    • @rishabh_pant
      @rishabh_pant 7 หลายเดือนก่อน +2

      ​@@takeUforward owned that laughing fella

    • @gautam6405
      @gautam6405 7 หลายเดือนก่อน

      ur solution is not space optimized as recursion has call stack which can consume memory

    • @Sam-gx9xl
      @Sam-gx9xl 4 หลายเดือนก่อน

      I have already tried this code in code studio and it was not working ...it seems he has copied from love babbar ...he has also done the same thing but has missed some parameters

  • @saidhanyasudhan3160
    @saidhanyasudhan3160 7 หลายเดือนก่อน

    bro add this to playlist please

  • @lucygaming9726
    @lucygaming9726 6 หลายเดือนก่อน

    Should have also added the recursive O(k) stack space solution here. That is a bit easier to come up with.

  • @sathwikakovvuri6019
    @sathwikakovvuri6019 21 วันที่ผ่านมา +1

    Your eyes 👀 became too weak
    take care man

  • @akshaychavan5511
    @akshaychavan5511 2 หลายเดือนก่อน

    Loved it.
    I did it recursively as it was much easier for me to understand.
    class Solution:
    # returns first node and last node of the revered list
    def reverse(self, head):
    if head == None: return None
    prev = None
    current = head
    while current:
    nxt = current.next
    current.next = prev
    prev = current
    current = nxt
    return (prev, head)
    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
    if not head: return head
    kBackup = k
    newHead = head
    start = head
    while head:
    if k==1: # kth node found
    newHead = head
    nextListStart = head.next
    head.next = None # break the link
    first, last = self.reverse(start)
    last.next = self.reverseKGroup(nextListStart, kBackup) # recursively call for remaining list
    k-=1
    head = head.next
    return newHead

  • @ummehanifatima2039
    @ummehanifatima2039 8 หลายเดือนก่อน

    Please Striver provide iterative approach Pyhton code for this problem I have tried lot many times but none of my test cases are getting passed.

  • @ShubhamGupta-jy3wv
    @ShubhamGupta-jy3wv 7 หลายเดือนก่อน

    Next strings plsss

  • @saswatrath4646
    @saswatrath4646 3 หลายเดือนก่อน

    Time complexity in worst case will be O(N^2). consider a case when K =1, the inner loops will go through every node and the outer loops will go through every element individually as well. So, overall tc is O(N^2). How come nobody is the comment section except one student is asking about it ?

    • @maverick_8707
      @maverick_8707 3 หลายเดือนก่อน +1

      BRO U DIDN'T UNDERSTAND THE CONCEPT IT WILL ALWAYS BE O(2N) NOT MORE THAN THAT EVEN K=1 THEN REVERSE WILL DIRECTLY RETURN THE HEAD WHICH WILL BE ONE LOOP AND OVERALL WE WILL TRAVERSE TO THE GIVEN LINKED LIST WHICH IS O(N)

    • @AK-nj1je
      @AK-nj1je 2 หลายเดือนก่อน

      @@maverick_8707 bro please explain the tc i didn't understood
      one is for finding the kth node which we can take O(k) and then reverse which also we can take O(k) and what about the outer while loop it will also run for k times no
      ?

  • @ashikahmmed8809
    @ashikahmmed8809 8 หลายเดือนก่อน +2

    1st comment bhaiya

  • @udsingh3044
    @udsingh3044 7 หลายเดือนก่อน +1

    I have used recursion.
    ```
    Node *helper(Node *root, int k) {
    if(root == NULL || root->next == NULL) return root;
    int count = 0;
    Node *curr = root, *prev = NULL, *nxt = NULL;
    while(count != k && curr != NULL) {
    curr = curr->next;
    count++;
    }
    if(count < k) return root;
    curr = root;
    count = 0;
    while(count < k && curr != NULL) {
    nxt = curr->next;
    curr->next = prev;
    prev = curr;
    curr = nxt;
    count++;
    }
    Node *temp = helper(nxt, k);
    root->next = temp;
    return prev;
    }
    ```

    • @pravinthakur7791
      @pravinthakur7791 3 หลายเดือนก่อน

      Impressive and easy to understand

  • @veditakamat6060
    @veditakamat6060 4 หลายเดือนก่อน +1

    Isn't this TC O(N^2) because of outer loop traversing the whole linked list & inner functions traversing sections of linked list ?

    • @saswatrath4646
      @saswatrath4646 3 หลายเดือนก่อน

      yes it will be.

    • @AK-nj1je
      @AK-nj1je 2 หลายเดือนก่อน

      @@saswatrath4646 not n^2 but k^2

  • @mayankshekhar9191
    @mayankshekhar9191 6 หลายเดือนก่อน

    The last group of linked list(last part where we don't have kth node) is not getting reversed, tried with different approaches as well.

    • @mayankshekhar9191
      @mayankshekhar9191 6 หลายเดือนก่อน +1

      Its working now, thanks
      class Solution
      {
      public static Node reverse(Node head, int k)
      {
      //Your code here
      Node temp = head;
      Node prevNode = null;
      while(temp != null)
      {
      Node kthNode = findKthNode(temp, k);
      if(kthNode == null)
      {
      temp = ReverseGroup(temp);
      if(prevNode != null) prevNode.next = temp;
      break;
      }
      Node nextNode = kthNode.next;
      kthNode.next = null;
      Node newNode = ReverseGroup(temp);
      if(temp == head)
      {
      head = newNode;
      } else {
      prevNode.next = kthNode;
      }
      prevNode = temp;
      temp = nextNode;
      }
      return head;
      }
      public static Node findKthNode(Node head, int k)
      {
      Node temp = head;
      if(temp == null || temp.next == null)
      return temp;
      while(temp != null && k > 1)
      {
      temp = temp.next;
      k--;
      }
      return temp;
      }
      public static Node ReverseGroup(Node head)
      {
      Node temp = head;
      if(temp == null || temp.next == null)
      return temp;
      Node last = null;
      Node temp1 = head.next;
      //reverse the linked list till n-1
      while(head.next != null){
      head.next = last;
      last = head;
      head = temp1;
      temp1 = temp1.next;
      }
      //last node pointer change
      head.next = last;
      last = head;
      return last;
      }
      }

  • @kabirkapoor9149
    @kabirkapoor9149 4 หลายเดือนก่อน

    Striver Make Strings Playlist Please ......

  • @ashwaniagrawal27
    @ashwaniagrawal27 5 หลายเดือนก่อน

    Confusion
    prevlast is a pointer toh usme hum prevlast->next = Kthnode kaise store karwa sakte hai??

    • @piyushmakad4768
      @piyushmakad4768 5 หลายเดือนก่อน +1

      It is not a pointer,it is node which is initiated as null or head...And while traveling we are assigning prevNode to temp and incrementing temp...

  • @RN-cj8up
    @RN-cj8up 5 หลายเดือนก่อน

    using recursion it would be easy

  • @supersuperhero2449
    @supersuperhero2449 5 หลายเดือนก่อน

    Main while loop will not take any time sir ?

    • @pavankumarreddy8642
      @pavankumarreddy8642 5 หลายเดือนก่อน

      That's what i didn't get. The TC is O(3*n), if the main while loop complexity is considered

  • @DarkKight123
    @DarkKight123 7 หลายเดือนก่อน

    The Sheet link is not working
    Please fix it.

  • @Harika_Ramesh
    @Harika_Ramesh 5 หลายเดือนก่อน +1

    Why we used k-=1 while finding getkthnode method

    • @rushhour4379
      @rushhour4379 5 หลายเดือนก่อน

      We start with k and decrement it at each step while traversing the list. It's like a count down to reach the Kth node

    • @ashwinmiyer6159
      @ashwinmiyer6159 2 หลายเดือนก่อน

      @@rushhour4379 no but there is one k-=1 before the loop

  • @harshitgarg2820
    @harshitgarg2820 7 หลายเดือนก่อน

    My solution is not working, and the solution given in the sheet is different. For ex => head = [1,2,3,4,5], k = 2, I'm getting [2,1,5]. PLZ help!

    • @takeUforward
      @takeUforward  7 หลายเดือนก่อน +5

      class Solution {
      public:
      ListNode* reverseLinkedList(ListNode *head)
      {
      ListNode* temp = head;
      ListNode* prev = NULL;
      while(temp != NULL) {
      ListNode* front = temp->next;
      temp->next = prev;
      prev = temp;
      temp = front;
      }
      return prev;
      }
      private:
      ListNode* getKthNode(ListNode* temp, int k) {
      k -= 1;
      while(temp != NULL && k > 0) {
      k--;
      temp = temp->next;
      }
      return temp;
      }
      public:
      ListNode* reverseKGroup(ListNode* head, int k) {
      ListNode* temp = head;
      ListNode* prevLast = NULL;
      while(temp != NULL) {
      ListNode* kThNode = getKthNode(temp, k);
      if(kThNode == NULL) break;
      ListNode* nextHead = kThNode->next;
      kThNode->next = NULL;
      ListNode* newHeadOfKGroup = reverseLinkedList(temp);
      if(temp == head) {
      head = newHeadOfKGroup;
      }
      else {
      prevLast->next = newHeadOfKGroup;
      }
      prevLast = temp;
      temp = nextHead;
      }
      if(prevLast != NULL) prevLast->next = temp;
      return head;
      }
      };

  • @user-gk4zy6bk7l
    @user-gk4zy6bk7l 2 หลายเดือนก่อน

    god

  • @alessandrocamilleri1239
    @alessandrocamilleri1239 7 หลายเดือนก่อน

    Excellent explanation.
    The following solution reduces worst time complexity to O(n+k):
    pair reverseK(Node* head, int k)
    {
    Node* p = NULL;
    Node* q = head;
    int count = k;
    while (count > 0 && q)
    {
    count--;
    Node*r = q->next;
    q->next = p;
    p = q;
    q = r;
    }
    if (count > 0)
    return reverseK(p, k-count);
    return {p, q};
    }
    Node* reverseKGroup(Node* head, int k)
    {
    Node* dummyNode = new Node(-1, head);
    Node* prevTail = dummyNode;
    Node* kHead = dummyNode->next;
    while (kHead)
    {
    pair p = reverseK(kHead, k);
    prevTail-> next = p.first;
    prevTail = kHead;
    kHead = p.second;
    }
    Node* ans = dummyNode->next;
    delete dummyNode;
    return ans;
    }

  • @parthh1112
    @parthh1112 3 หลายเดือนก่อน

    class Solution
    {
    public:
    ListNode *reverse(ListNode *&head)
    {
    ListNode *temp = head;
    ListNode *put = nullptr;
    while (temp)
    {
    ListNode *h = temp->next;
    temp->next = put;
    put = temp;
    temp = h;
    }
    return put;
    }
    ListNode *reverseKGroup(ListNode *head, int k)
    {
    if (k == 1)
    return head;
    int i = 1;
    ListNode *temp = head, *start = head, *pre = nullptr, *ans = nullptr;
    bool chk = 1;
    while (temp)
    {
    if (i == k)
    {
    ListNode *upcoming = temp->next;
    temp->next = nullptr;
    ListNode *coming = reverse(start);
    ListNode *it = coming;
    if (!pre)
    ans = coming;
    else
    pre->next = coming;
    while (it->next)
    it = it->next;
    it->next = upcoming;
    i = 1;
    start = upcoming;
    temp = upcoming;
    pre = it;
    }
    else
    {
    i++;
    temp = temp->next;
    }
    }
    return ans;
    }
    };

  • @iamnottech8918
    @iamnottech8918 5 หลายเดือนก่อน

    My solution , I wrote it straightforward here second is start and temp will move ,Hope it helps
    class Solution {
    public:
    ListNode* reverseLL(ListNode* head)
    {
    if(head==NULL || head->next==NULL)
    return head;
    ListNode*prev=NULL;
    ListNode*temp=head;
    while(temp)
    {
    ListNode*store=temp->next;
    temp->next=prev;
    prev=temp;
    temp=store;

    }
    return prev;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
    if(head==NULL || head->next==NULL)
    return head;
    ListNode*temp=head;
    ListNode*second=head;
    ListNode*prev=NULL;
    ListNode*next=NULL;
    int count=0;
    while(temp!=NULL)
    {
    count++;
    if(count==k)
    {
    next= temp->next;
    temp->next=NULL;
    temp=reverseLL(second);
    if(second==head)
    {
    head=temp;
    }
    else
    {
    prev->next=temp;
    }
    prev=second;
    temp=next;
    second=next;
    count=0;
    continue;
    }
    temp=temp->next;
    }
    if(countnext=next;

    return head;
    }
    };

  • @njquotes9478
    @njquotes9478 3 หลายเดือนก่อน

    Please provide Java code. My code is giving TLE during submission.

    • @artikumari-es6ep
      @artikumari-es6ep 23 วันที่ผ่านมา

      JAVA SOLUTION :
      public ListNode reverseKGroup(ListNode head, int k) {
      ListNode temp = head;
      ListNode previous = null;
      while(temp!=null){
      ListNode kthNode= findKthNode(temp, k);
      if(kthNode==null){
      if(previous!=null){
      previous.next= temp;
      }
      break;
      }
      ListNode nextNode=kthNode.next;
      kthNode.next=null;
      // ListNode newHead=reverse(temp);
      reverse(temp);
      if(head==temp){
      head= kthNode;
      //head = newHead;
      } else{
      previous.next=kthNode;
      //previous.next = newHead;
      }
      //temp.next= nextNode;
      previous = temp;
      temp = nextNode;
      }
      return head;
      }
      private ListNode findKthNode(ListNode temp, int k){
      k=k-1;
      while(temp!=null && k>0){
      temp=temp.next;
      k--;
      }
      return temp;
      }
      private ListNode reverse(ListNode temp){
      ListNode prev= null;
      ListNode cur=temp;
      while(cur!=null){
      ListNode next = cur.next;
      cur.next=prev;
      prev=cur;
      cur=next;
      }
      return prev;
      }

  • @ummehanifatima2039
    @ummehanifatima2039 8 หลายเดือนก่อน +1

    Only one test case is still not passing
    def reverse_ll(head):
    prev = None
    curr = head
    next_node = None
    while curr:
    next_node = curr.next
    curr.next = prev
    prev = curr
    curr = next_node
    return prev
    def get_kth_node(temp, k):
    k -= 1
    while temp and k > 0:
    k -= 1
    temp = temp.next
    return temp
    def kReverse(head, k):
    temp = head
    prev_last = None
    next_node = None
    while temp:
    kth_node = get_kth_node(temp, k)
    if not kth_node:
    if prev_last:
    prev_last.next = temp
    break
    next_node = kth_node.next
    kth_node.next = None
    reverse_ll(temp)
    if temp == head:
    head = kth_node
    else:
    if prev_last:
    prev_last.next = kth_node
    prev_last = temp
    temp = next_node
    return head

    • @takeUforward
      @takeUforward  7 หลายเดือนก่อน

      class Solution {
      public:
      ListNode* reverseLinkedList(ListNode *head)
      {
      ListNode* temp = head;
      ListNode* prev = NULL;
      while(temp != NULL) {
      ListNode* front = temp->next;
      temp->next = prev;
      prev = temp;
      temp = front;
      }
      return prev;
      }
      private:
      ListNode* getKthNode(ListNode* temp, int k) {
      k -= 1;
      while(temp != NULL && k > 0) {
      k--;
      temp = temp->next;
      }
      return temp;
      }
      public:
      ListNode* reverseKGroup(ListNode* head, int k) {
      ListNode* temp = head;
      ListNode* prevLast = NULL;
      while(temp != NULL) {
      ListNode* kThNode = getKthNode(temp, k);
      if(kThNode == NULL) break;
      ListNode* nextHead = kThNode->next;
      kThNode->next = NULL;
      ListNode* newHeadOfKGroup = reverseLinkedList(temp);
      if(temp == head) {
      head = newHeadOfKGroup;
      }
      else {
      prevLast->next = newHeadOfKGroup;
      }
      prevLast = temp;
      temp = nextHead;
      }
      if(prevLast != NULL) prevLast->next = temp;
      return head;
      }
      };

  • @shikherdwivedi4559
    @shikherdwivedi4559 หลายเดือนก่อน

    can't we do it with dummy? create the whole chain again simple

  • @artikumari-es6ep
    @artikumari-es6ep 23 วันที่ผ่านมา

    JAVA Solution :
    public ListNode reverseKGroup(ListNode head, int k) {
    ListNode temp = head;
    ListNode previous = null;
    while(temp!=null){
    ListNode kthNode= findKthNode(temp, k);
    if(kthNode==null){
    if(previous!=null){
    previous.next= temp;
    }
    break;
    }
    ListNode nextNode=kthNode.next;
    kthNode.next=null;
    // ListNode newHead=reverse(temp);
    reverse(temp);
    if(head==temp){
    head= kthNode;
    //head = newHead;
    } else{
    previous.next=kthNode;
    //previous.next = newHead;
    }
    //temp.next= nextNode;
    previous = temp;
    temp = nextNode;
    }
    return head;
    }
    private ListNode findKthNode(ListNode temp, int k){
    k=k-1;
    while(temp!=null && k>0){
    temp=temp.next;
    k--;
    }
    return temp;
    }
    private ListNode reverse(ListNode temp){
    ListNode prev= null;
    ListNode cur=temp;
    while(cur!=null){
    ListNode next = cur.next;
    cur.next=prev;
    prev=cur;
    cur=next;
    }
    return prev;
    }

  • @user-pb4oj8sd1y
    @user-pb4oj8sd1y 6 หลายเดือนก่อน

    recursive solution
    class Solution {
    public:
    int count(ListNode* head) {
    int bcount = 0;
    while (head != nullptr) {
    bcount++;
    head = head->next;
    }
    return bcount;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
    // basecase
    if (count(head) < k || head == nullptr || head->next == nullptr) {
    return head;
    }
    int cnt = 0;
    ListNode* prev = nullptr;
    ListNode* temp = head;
    ListNode* next = NULL;
    while (temp != nullptr && cnt < k) {
    next = temp->next;
    temp->next = prev;
    prev = temp;
    temp = next;
    cnt++;
    }
    // new head is prev
    head->next = reverseKGroup(next, k);
    return prev;
    }
    };

  • @cenacr007
    @cenacr007 3 หลายเดือนก่อน

    us

  • @anshgupta2506
    @anshgupta2506 7 หลายเดือนก่อน +2

    i have done this q by recursion
    Node* rev(Node* head){
    if(head==NULL|| head->next==NULL)return head;
    Node* front=NULL;
    Node* prev=NULL;
    Node* temp=head;
    while(temp!=NULL){
    front=temp->next;
    temp->next=prev;
    prev=temp;
    temp=front;
    }
    return prev;
    }
    Node* kReverse(Node* head, int k) {
    // Write your code here.
    if(k==1 || head==NULL)return head;
    int cnt=0;
    Node* temp=head;
    while(temp!=NULL){
    cnt++;
    if(cnt==k)break;
    temp=temp->next;
    if(temp==NULL && cntnext,k);

    temp->next=NULL;
    Node* newhead=rev(head);
    Node* newtemp=newhead;
    while(newtemp->next!=NULL){
    newtemp=newtemp->next;
    }
    newtemp->next=nextnewhead;
    return newhead;
    }

  • @spartant_1212
    @spartant_1212 2 หลายเดือนก่อน

    It is not correct about the TC. It is O(N**2) not O(N).
    You are wrong about that.

    • @codemeanslove
      @codemeanslove 2 หลายเดือนก่อน

      He is correct 💯
      O(2n)
      After normalisation
      On)

  • @Ayush37262
    @Ayush37262 5 หลายเดือนก่อน +1

    Sorry to say, but this time you didn't explained well 😢

  • @dewanandkumar8589
    @dewanandkumar8589 2 หลายเดือนก่อน

    Understood

  • @himanshidafouty347
    @himanshidafouty347 หลายเดือนก่อน

    Understood

  • @abhishekprasad010
    @abhishekprasad010 หลายเดือนก่อน

    Understood