上次采用了创建一个新的链表和节点的方式来实现倒序,现在我们改用创建一个新的链表,然后把原来的节点移过去的方式来实现
首先,创建一个内部类用作容器:
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,这样就完成了倒序。