反转链表理解(java)

2019-03-22  本文已影响0人  岸上生活

1、定义链表节点对象

public class ListNode {

        int val;//定义值

        ListNode  next=null;//定义下一引用节点

        ListNode(int val){

              this.val=val;

         }

}


2、反转方法及测试

public class ListNodeDone {

    public ListNode reverse(ListNode node){

        ListNode next=null;//临时变量 用于下次循环

        ListNode tail=null;//链表尾巴

        while(null!=node){

            next=node.next; // 1定义临时变量  为什么不在最后一步 直接 node =node.next  此时 node.next 在步骤2 已经变化

            node.next=tail;//2将当前节点 指向尾巴对象  倒序嘛  这一步 是每次循环连接节点的操作

            tail=node;// 3然后尾巴 重新赋值  取当前节点 作为新的尾巴

            node=next;//4

            /*1 和 4  用于保证while循环 一直 往下一个节点循环*/

            /*2 和3

            *

            * 1.next->null 此时  尾巴为空  1指向null后  1 作为新的尾巴  节点1

            *

            * 2.next->1  此时  尾巴为1  2指向1后  2 作为新的尾巴    节点2 ->节点1

            *

            *

            *  类推  节点5->4>3>2>1

            * */

        }

        return tail;

    }

    public static void main(String[] args) {

        //新建节点

        ListNode a=new ListNode(1);

        ListNode b=new ListNode(2);

        ListNode c=new ListNode(3);

        ListNode d=new ListNode(4);

        ListNode e=new ListNode(5);

        ListNode f=new ListNode(6);

        //连接节点

        a.next=b;

        b.next=c;

        c.next=d;

        d.next=e;

        e.next=f;

        System.out.println("*************************************************");

        new ListNodeDone().reverse(a);

        while(f!=null){

            System.out.print(f.val+"->");

            f=  f.next;

        }

    }

}

上一篇 下一篇

猜你喜欢

热点阅读