【数据结构与算法】单链表反转

题目

将链表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次循环
在这里插入图片描述

原创文章 255 获赞 116 访问量 19万+

猜你喜欢

转载自blog.csdn.net/cxh6863/article/details/103689511