反转链表(2)

上次采用了创建一个新的链表和节点的方式来实现倒序,现在我们改用创建一个新的链表,然后把原来的节点移过去的方式来实现

首先,创建一个内部类用作容器:

static class List{//创建一个容器类
        ListNode head;//头结点
        public List(ListNode head){//构造方法
            this.head=head;
        }
    }

在这个容器类里面分别添加一个删除和添加头节点的方法:

        public void addFirst(ListNode first){//添加头结点
            first.setNext(head);//把下一个结点设置为原来的头结点
            head=first;//把新结点设置为头结点
        }
        public ListNode removeFirst(){//删除头结点
            ListNode first=head;//拿到头结点
            if(first!=null){//如果头结点不为空
                head=first.getNext();//把头结点设置为原来头结点的下一个结点,相当于把头结点移除了
            }
            return first;//返回移除的结点
        }
      

然后是重置方法,还是在这个容器里:

  public ListNode reverseList(ListNode head){
            List list1=new List(head);//创建一个容器用于存放原链表
            List list2=new List(null);//创建一个空容器用于存放反转后的链表
            while (true){
                ListNode first=list1.removeFirst();//拿到原链表的头结点
                if (first==null){//如果头结点为空,说明已经移除完了
                    break;
                }
                list2.addFirst(first);//如果头节点不为空,把头结点添加到空链表中
            }
            return list2.head;//返回反转后的链表
        }

这里就是把原来的头节点一次又一次的移到新的链表中去作为新链表的头节点,比如第一次移了1,第二次2,第三次3.....,那么新节点的头节点第一次为1,第二次2,第三次3,最后就是5,这样就完成了倒序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值