假设有下面的这个链表
那么如何让它倒序了
首先我们创建两个值为null 的链表节点引用如下图
next=head.next;
执行上面的操作链表变化如下
head.next=pre;
因为pre=null 所以可以等价于下面这张图
pre=head;
head=next;
这是第一次循环的结果
我们在来一下就可以看到神奇的变化了
next=head.next;
head.next=pre;
这图可以简化为
pre=head;
head=next;
以此类推就可以得到链表的倒序啦
最后的结果如下
自己画图去推理一下这样理解会更深刻点下面看一下代码实现
public class LinkReverseTest {
public static void main(String[] args) {
//初始化链表
LinkList list=new LinkList(1);
LinkList current=list.addNode(2);
current=current.addNode(3);
current=current.addNode(4);
LinkList.print(list);
//链表逆序
System.out.println();
System.out.println("链表逆序结果如下");
LinkList pre=LinkList.LinkReverse(list);
LinkList.print(pre);
}
}
//链表
class LinkList{
int data;
LinkList next;
LinkList(){
next=null;
}
LinkList(int data){
this.data=data;
next=null;
}
public LinkList addNode(int data){
LinkList newNode=new LinkList(data);
this.next=newNode;
return newNode;
}
public static void print(LinkList head){
while(head!=null){
System.out.print(head.data+" ");
head=head.next;
}
}
public static LinkList LinkReverse(LinkList head){
LinkList next=null;
LinkList pre = null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
}