题目
将链表1->2->3->4->5
转换为5->4->3->2->1
实现方法
以循环遍历的方式以实现单链表反转
public static Node reverse(Node node){
//循环遍历实现
Node reverse=null;
while (node!=null){
Node next=node.next;
node.next=reverse;
reverse=node;
node=next;
}
return reverse;
}
分析链表变化
node初始值:
1->2->3->4->5->null
reverse初始值:
null
第1次循环
变量 | 值 |
---|
next | 2->3->4->5->null |
node.next | null |
reverse | 1->null |
node | 2->3->4->5->null |
第2次循环
变量 | 值 |
---|
next | 3->4->5->null |
node.next | 1->null |
reverse | 2->1->null |
node | 3->4->5->null |
第3次循环
变量 | 值 |
---|
next | 4->5->null |
node.next | 2->1->null |
reverse | 3->2->1->null |
node | 4->5->null |
第4次循环
变量 | 值 |
---|
next | 5->null |
node.next | 3->2->1->null |
reverse | 4->3->2->1->null |
node | 5->null |
第5次循环
变量 | 值 |
---|
next | null |
node.next | 4->3->2->1->null |
reverse | 5->4->3->2->1->null |
node | null |
源码
public class LinkedListReserve {
public static class Node{
private int value;
private Node next;
public Node(int value,Node next){
this.value=value;
this.next=next;
}
}
public static Node reverse(Node node){
//循环遍历实现
Node reverse=null;
while (node!=null){
Node next=node.next;
node.next=reverse;
reverse=node;
node=next;
}
return reverse;
}
public static void main(String[] args) {
Node node5=new Node(5,null);
Node node4=new Node(4,node5);
Node node3=new Node(3,node4);
Node node2 =new Node(2,node3);
Node node1=new Node(1,node2);
Node reverse = reverse(node1);
System.out.println(reverse);
}
}
运行结果
初始值
第1次循环
第2次循环
第3次循环
第4次循环
第5次循环