L10. Check if a LinkedList is Palindrome or Not | Multiple Approaches

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 พ.ย. 2023
  • Problem Link: tinyurl.com/2p869csv
    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

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

  • @akashkumarprajapati9874
    @akashkumarprajapati9874 8 หลายเดือนก่อน +103

    Aapke chakkar mai maine love babbar chhod diya , you are a god of data structure

    • @AbhishekKumar-nz9dn
      @AbhishekKumar-nz9dn 7 หลายเดือนก่อน +12

      same here

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

      Same, He is good for beginners only!

    • @hashcodez757
      @hashcodez757 26 วันที่ผ่านมา +2

      bhai vo *chorr diya hota hai🥲

    • @sakshammisra189
      @sakshammisra189 22 วันที่ผ่านมา +4

      @@hashcodez757 bhai tumhe kya pata us bhai ki pohoch kaha tk hai

    • @Gamingwithandriyas
      @Gamingwithandriyas 12 วันที่ผ่านมา

      @@sakshammisra189 😂🤣

  • @59_sujatachandra76
    @59_sujatachandra76 6 หลายเดือนก่อน +11

    I must say u are the god of DSA .

  • @gautamraj-f7d
    @gautamraj-f7d หลายเดือนก่อน +3

    CodeHelp ka course kharid ke yaha se padh rha 🙃. Nice explanation.

  • @kai125
    @kai125 5 หลายเดือนก่อน +9

    14:27 You actually don't need to take the first middle and reverse nodes AFTER the first middle in case of EVEN LL. We can simply take the second middle in both odd and even cases and pass it in the reverse function instead of passing it as middle->next. It will work for the odd LL too because while comparing, both first and second variable will reach the same node as we haven't divided the list. JAVA Code below from LeetCode.
    /**
    * Definition for singly-linked list.
    * public class ListNode {
    * int val;
    * ListNode next;
    * ListNode() {}
    * ListNode(int val) { this.val = val; }
    * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    * }
    */
    class Solution {
    public boolean isPalindrome(ListNode head) {
    //Find the middle node. (second middle in case of even no of nodes)
    ListNode slow = head;
    ListNode fast = head;
    while(fast!=null && fast.next!=null){
    slow = slow.next;
    fast = fast.next.next;
    }
    // Reverse all nodes starting from the middle node till the last node.
    ListNode newhead = reverse(slow);
    // Compare nodes from the original head and from the reversed linked list's head (newhead).
    ListNode first = head;
    ListNode second = newhead;
    //If second reaches null it means we have a palindrome LL.
    while(second!=null){
    if(first.val!=second.val){ //if values not same return false as list is not palindrome.
    reverse(newhead); //re-reversing the reversed linked list to make it original LL.
    return false;
    }
    first=first.next;
    second=second.next;
    }
    reverse(newhead);
    return true;
    }
    //method to reverse a linked list
    private ListNode reverse(ListNode head){
    ListNode temp = head;
    ListNode prev = null;
    while(temp!=null){
    ListNode front = temp.next;
    temp.next = prev;
    prev = temp;
    temp = front;
    }
    return prev;
    }
    }

  • @103himajapoluri6
    @103himajapoluri6 8 หลายเดือนก่อน +3

    Hi striver, you always fascinate me with your solutions

  • @shubhamrathour9774
    @shubhamrathour9774 8 หลายเดือนก่อน +15

    Hey Striver you doing such a great job, It's giving us such a huge impact on our professional journey
    Thanks a lot 🙏

    • @selvarajan4062
      @selvarajan4062 7 วันที่ผ่านมา +1

      Can anyone share the code in Python and java please 😢

  • @ManishLakkavatri
    @ManishLakkavatri 8 หลายเดือนก่อน +3

    Understood and crystal clear about the solution. Thanks Striver!

    • @selvarajan4062
      @selvarajan4062 7 วันที่ผ่านมา

      Can anyone share the code in Python and java please 😢

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

    Understood,thanks striver for this amazing video.

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

    #Striver rocks, god bless you & all

  • @JothiprakashThangaraj
    @JothiprakashThangaraj 12 วันที่ผ่านมา

    understood !!! thanks a lot striver!!!

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

    great explanation!

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

    Awesome Bhaiya........

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

    Thanks Striver!!!

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

    Thank you striver!!

  • @vaibhavgarg5537
    @vaibhavgarg5537 5 หลายเดือนก่อน +4

    Since we used reverse function within while loop
    Doesn't the time complexity should be multiplied n/2*n/2.....
    Please clear this

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

    Understood, thank you.

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

    nice approach compare to all u tube

  • @MayankisG
    @MayankisG 2 ชั่วโมงที่ผ่านมา +1

    Understood

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

    Luv you bhai

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

    Thank you Bhaiya

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

    BHAIYA, PLEASE MAKE A VIDEO TO PRINT MATRIX DIAGONALLY. PLEASE. ❤

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

    Understood sir!😘

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

    Nice!

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

    Understood✅🔥🔥

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

    I am thinkin of different approach.
    Insert the first half elements to stack and compare the second half elements with the stack.
    Advantage: Don't have to reverse the list.
    TC : O(N)
    SC : O(N/2) -> for the stack space.

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

      just did it with same approch i think but only beat 40% on leetcode i dont understand why
      also will u share ur code?

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

      @@SAROHY function call stack used in recursive soln is very optimized because it works at hardware layer directly.
      But STL stack is very abstract and we don't know what it actually uses underneath to implement stack which might increase the space used by the code.

    • @Gurunat16
      @Gurunat16 12 วันที่ผ่านมา

      Will that not be O(N) + O(N/2).
      O(N) for LL Traversal (1st half into stack and 2nd half for comparsion)
      O(N/2) for Stack traversal??

  • @AdityaJain-ed9my
    @AdityaJain-ed9my 23 ชั่วโมงที่ผ่านมา

    thanks sir.

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

    understood dada😃

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

    Understoood

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

    Thank you..
    What app are you using in the ipad?

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

    Understood!

  • @khalasianiket816
    @khalasianiket816 28 วันที่ผ่านมา

    understood❤

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

    Understood!!!

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

    understood

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

    Bhai linked list ke advance questions lao please

  • @guttulavybhav1030
    @guttulavybhav1030 19 วันที่ผ่านมา

    striver you said to take the mid as m1 but it will work in same way even if we take mid as m2....

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

    Simpler
    bool isPalindrome(ListNode* head) {
    ListNode *slow = head, *fast = head;
    while(fast && fast->next) {
    slow = slow->next;
    fast = fast->next->next;
    }
    ListNode *prev = NULL, *current = slow;
    while(current){
    ListNode* next = current->next;
    current->next = prev;
    prev = current;
    current = next;
    }
    while(head && prev){
    if(head->val != prev->val) return false;
    head = head->next;
    prev = prev->next;
    }
    return true;
    }

  • @mohitt_amv
    @mohitt_amv ชั่วโมงที่ผ่านมา

    using stack 2:08

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

    bro agala vid kab aayegi ?

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

    Can we solve like we do with strings : reverse the whole linked list and compare it with the original linked list.
    temp=head
    if head==None or head.next==None:
    return head
    new_head=self.isPalindrome(head.next)
    front=head.next
    head.next=front
    head.next=None
    return new_head==temp why this is not working

  • @571_NehaChatterjee
    @571_NehaChatterjee 16 วันที่ผ่านมา +2

    Shouldn't the space complexity be O(N)? Since we are using recursive stack space?

    • @sahilsrivastava7905
      @sahilsrivastava7905 8 วันที่ผ่านมา

      we can also reverse using iterative approach.

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

    Sriver Bhai just wanted to ask currently I am in semester 5 and want to prepare for DSA in python i studied DSA in sem 3 but for University exam so I should follow ur A2Z playlist or SDE sheet please reply brother

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

      I think you should follow A2Z bro

    • @selvarajan4062
      @selvarajan4062 7 วันที่ผ่านมา

      Can anyone share the code in Python and java please 😢

  • @JeniferM-g1q
    @JeniferM-g1q 21 วันที่ผ่านมา

    its gives time out of bounce and segmentation error

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

    if we use reverse function in iterative manner so will it increase the time complexity?

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

      In iterative approach it will only take O(n) time because the code traverses the entire linked list once, and space complexity of O(1) but in case of recursive approach it will end up taking O(N) because we traverse the linked list twice: once to push the values onto the stack, and once to pop the values and update the linked list. but the space complexity will be O(N) as he explained in the last videos.
      But i'm also in doubt why he has taken the recursive approach rather than iterative.

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

      I think recursive also taking O(n) here because it is applied on the half part of the linked list

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

      @@user-pk1vb6su8g hmm my doubt was regarding the space complexity bcz TC will be same in both the cases. there might be a chance that the stack space it is using is not taking any extra space and have a SC of O(1).

    • @ishikacasley2786
      @ishikacasley2786 29 วันที่ผ่านมา

      @@InspireBreeze I guess in the case of recursive the space complexity will might vary because usme stack space use hoti hai jitna I know

  • @corporateAniruddha
    @corporateAniruddha 8 หลายเดือนก่อน +3

    Find middle of a Linked list wo bala problem kaha hay vaiya
    Yeh 10 number video hay usse pehele to nehi hay

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

      Follow this link

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

      Aaega jld hi

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

    class Solution {
    public:
    ListNode* reverseList(ListNode* node){
    ListNode* temp=node;
    ListNode* prev=NULL;
    ListNode* curr = temp;
    if(temp->next == NULL){
    return temp;
    }
    while(temp != NULL){
    curr = temp->next;
    temp->next=prev;
    prev=temp;
    temp=curr;
    }
    return prev;
    }
    bool isPalindrome(ListNode* head) {
    if( head==NULL){
    return false;
    }
    ListNode* revList= reverseList(head);
    ListNode* head2=revList;
    while(head != NULL){
    if(head->val == head2->val){
    head= head->next;
    head2=head2->next;
    }
    else{
    return 0;
    }
    }
    return true;
    }
    };
    Can someone explain why this code is failing at test case [1,1,2,1]?

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

      I am facing same issue....i don't know why.....

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

    Hey All , A quick doubt , When finding the middle of the linked list , wont the time complexity be O(N) and not O(N/2) because fast pointer will have to reach the end of the linked list for us to get the slow or middle node ? Correct me if i am wrong

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

      Bro, U need to consider the number of iterations u hav taken to reach the last node but not the number of nodes you have crossed while calculating time complexity

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

    DOUBT: At 11:04 , how come node with value 3 from the unreversed linked list portion, point to the (different) node with value 3 from the reversed linked list portion, since node 3 from the reverse linked list portion, already has 1 incoming connection from node 2, and another incoming connection from the node 3, isn't this incorrect, for a singly linked list in c++, we can only have 1 incoming connection and 1 outgoing connection, but for node 3, it has 2 incoming connections?

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

      for a single node, incoming connections can be multiple because the pointers are stored in the nodes from which connection is outgoing.
      for example:
      1->3, 2->3.
      Both 1 and 2 have their Next pointers pointing to 3.
      And 3 doesn't have to store incoming pointers. It can store its own outgoing pointer that can point to anything.
      3->100, 3->null
      Hope I explained it well.

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

    Something's wrong!
    here in video: 14:24
    For odd numbered linked list example: 1->2->3->2->1->x
    Once you have reversed the second half, after 2 iterations when you have compared node(1) and node(2) and when your first and second pointer.
    first ptr will be pointing to 3 but second ptr will be pointing to null.
    I think you calculated middle wrong.
    Instead of node(3), it should have been node(2)
    That way for 3rd iteration your first and second pointers will point to node(3) and we can conclude that LL is palindrome!

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

    i think we can just reverse whole node then compare it to original one it will be simple.

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

      It include space complexity of O(n) bro because of one you reverse whole LL then from which LL you compare your new reversed LL

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

    US

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

    14:58 Why there is a RUNTIME ERROR when I write while (fast->next->next != NULL && fast->next != NULL) instead of while (fast->next != NULL && fast->next->next != NULL)....Please Reply

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

      Suppose fast->next = NULL in this case you are looking for fast->next->next which results in run time error.

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

      The way && operator works is, if the first condition is true, then and only then it moves on the the next condition, if the first itself fails it wont check the next condition, it’s called short circuiting (not sure of the exact term). In your case, had you checked fast.next for null before checking for fast.next.next, the condition would have short circuited on the first check itself and hence it did not have to check for fast.next.next but if you write fast.next.next before the former, the short circuit will never happen and hence the error as fast.next is itself null.

  • @selvarajan4062
    @selvarajan4062 7 วันที่ผ่านมา +1

    Can anyone share the code in Python and java please 😢

  • @elite.warrior
    @elite.warrior 5 หลายเดือนก่อน

    class Solution {
    public ListNode reverse(ListNode slow,ListNode tail){
    ListNode prev = null;

    while(tail != null){
    ListNode front = tail.next;
    tail.next = prev;
    prev = tail;
    tail = front;
    }
    return prev;
    }
    public boolean isPalindrome(ListNode head) {
    if(head == null || head.next == null)return true;

    ListNode slow = head, fast = head;
    while(fast != null && fast.next != null){
    slow = slow.next;
    fast = fast.next.next;
    }

    ListNode tail = slow;
    tail = reverse(slow,tail);

    ListNode temp = head;
    while(temp != slow){// or tail !=null
    if(tail.val != temp.val)
    return false;
    tail = tail.next;
    temp = temp.next;
    }
    return true;
    }
    }

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

    ```Java
    class Solution {
    public boolean isPalindrome(ListNode head) {
    String num = "";
    ListNode curr = head;
    while(curr != null){
    num = num + curr.val;
    curr = curr.next;
    }
    int i = 0, j = num.length() - 1;
    while(i < j){
    if(num.charAt(i++) != num.charAt(j--)) return false;
    }
    return true;
    }
    }
    ```
    How come this O(1.5N) is not better than this? plz someone explain?

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

    sir appne niche linked lisk vapas reverse to kr di but first half se connect nhi kru aisa kyo please explain anyone to me

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

      kyu ki kbhi tode hi nai the na bro

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

    Striver just wanted to ask i havent started dsa so sud i start from that a2z dsa playlist along with the takeuforwsrd website where all the marerial is there
    So can i staet following it sequence wise
    I have already done cs50x from harvard so i thought lets begin dsa for interviews now
    Nd i dont know dp lec 34 or 35 is in the middle of othee series pls check that once does it really belong there
    Also is all the dsa topics covered in that playlist bcz i m newbie here
    And if not also it will b nice if u cud make a vdo as to what topics tocover other then that a2z playlist for dsa from which sources bcz for begineer its tough to find really good resources on dsa bcz many people will waste our time on the name of teaching dsa so i want from u the sources where i can get genuine dsa lec of the topics not covered

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

      it does not needs dp knowledge, it is solved without dp

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

    one case is not running using your code

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

    class Solution {
    public:
    void findans(ListNode *&t,ListNode *&y,bool &ans){
    if(!t)return ;
    findans(t->next,y,ans);
    if(t -> val != y -> val)ans = 0;
    y = y -> next;
    }
    bool isPalindrome(ListNode* head) {
    bool ans = 1;
    ListNode *t = head,*y = head;
    findans(t,y,ans);
    return ans;
    }
    };

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

      great code ,, literally great

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

    I think the space complexity should be O(n) as we are using the Linked List itself to check if palindrome or not(performing operatins on LL). In that case the TC and SC is equivalent to the brute force and the brute one is easier to understand and implement. Please clarify!

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

      Hey buddy, just to clear your doubt, the Space complexity is only counted, if we create a new data structure, if we modify an data structure in place(i.e the one that was given in the question, then it is not counted in space complexity)

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

      Hi , but in other lectures of striver, he has mentioned many times that if you tamper the given input it’s counted, so got a bit confused

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

      @@swagcoder Hey, I think, there might be some misunderstanding, I would suggest that you don't consider it as space complexity in this context.

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

    Isn't my solution easy and good ? , i just do simple iteration slow and fast and reverse the first half of the linkedlist while finding the mid point and after that just check the reversed linkedlist and the slow.next linkedlist .
    public boolean isPalindrome(ListNode head) {
    ListNode slow = head, fast = head, prev = null , temp = null;
    while (fast != null && fast.next != null) {
    temp = prev;
    prev = new ListNode(slow.val);
    prev.next = temp;
    slow = slow.next;
    fast = fast.next.next;
    }
    // This condition for odd length
    if ( fast != null ) {
    slow = slow.next;
    }
    while ( slow != null && prev != null ){
    if ( prev.val != slow.val ){
    return false;
    }
    slow = slow.next;
    prev = prev.next;
    }
    return true;
    }

    • @piyush.28
      @piyush.28 6 หลายเดือนก่อน

      This code is more readable

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

    Why he is called Striver

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

      Because he strived unlike anything to achieve what he is today & through this work of his, he not just inspires and motivates us....but also actually helps us in our journey to success. He is someone who has strived to rise right from the ashes and turned out to be so strong and phenomenal.
      Respect in the power of e!!!!
      P.S: He is still striving today....I mean look at the amount of (optimal quality)work he renders everyday!!!

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

    us

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

    Node* reverse(Node *head)
    {
    Node *pre = NULL;
    Node *cur = head;
    while(cur != NULL)
    {
    Node *post = cur->next;
    cur->next = pre;
    pre = cur;
    cur = post;
    }
    return pre;
    }
    Node *findMiddle(Node *head)
    {
    Node *slow = head, *fast = head;
    while(fast != NULL && fast->next != NULL)
    {
    slow = slow->next;
    fast = fast->next->next;
    }
    return slow;
    }
    bool isPalindrome(Node *head)
    {
    if(head == NULL || head->next == NULL)
    {
    return true;
    }
    Node *mid = findMiddle(head);
    Node *newHead = reverse(mid);
    while(head != NULL && newHead != NULL)
    {
    if(head->data != newHead->data)
    {
    return false;
    }
    head = head->next;
    newHead = newHead->next;
    }
    return true;
    }

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

    Understood

  • @JyotiPrakash-bs9hk
    @JyotiPrakash-bs9hk หลายเดือนก่อน

    understood

  • @RoshanKumar-jf5bx
    @RoshanKumar-jf5bx 8 หลายเดือนก่อน

    Understood

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

    Understood

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

    Understood

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

    Understood

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

    Understood

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

    Understood

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

    Understood

  • @user-quietwicked
    @user-quietwicked 7 หลายเดือนก่อน

    Understood

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

    Understood

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

    Understood

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

    understood

  • @user-ed8bc2hg5o
    @user-ed8bc2hg5o 8 วันที่ผ่านมา

    understood

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

    understood

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

    understood

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

    understood