Reverse single linked list Java

How to reverse a singly linked list in blocks of some given size in O (n) time in place? 4

public void reverseList(){
    Node before = null;
    Node tmp = head;
    Node next = tmp.next;
    while(tmp != null){
      if(next == null)
         return;
      tmp.next = before;
      before = tmp;
      tmp = next;
      next = next.next;
    }
}

This is the node class:

public class Node{
   public int data;
   public Node next;
   public Node(int data,Node next){
      this.data = data;
      this.next = next;
   }
}

When I input 4 - > 3 - > 2 - > 1, I get the output 4 I debug it and set the pointer correctly, but I still don't understand why it only outputs 4

Solution

Node next = tmp.next;
Node next = tmp.next;
while(tmp != null){

So what happens when TMP = = null?

But you almost got it

Node before = null;
Node tmp = head;
while (tmp != null) {
    Node next = tmp.next;
    tmp.next = before;
    before = tmp;
    tmp = next;
}
head = before;

Or better (?) Naming:

Node reversedPart = null;
Node current = head;
while (current != null) {
    Node next = current.next;
    current.next = reversedPart;
    reversedPart = current;
    current = next;
}
head = reversedPart;

ASCII Art:

<__<__<__ __ : reversedPart    : head
                 (__)__ __ __
head :   current:      >  >  >
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>