- 利用3个指针:revertNode、indexNode、next,先反转,再往后移动位置,直到链表的末端
- 实现一次遍历就可以反转链表,而且不需要额外的空间
public class 单向反转 {
public static void main(String[] args) {
Node node=generateLink();
Util.printNode(node);
// Node reverNode=revert(null);
// Node reverNode=revert(new Node(1));
Node reverNode=revert(node);
Util.printNode(reverNode);
}
//利用3个指针:revertNode、indexNode、next,先反转,再往后移动位置,直到链表的末端
//实现一次遍历就可以反转链表,而且不需要额外的空间
public static Node revert(Node header){
Node revertNode,indexNode,next;
if(header==null||header.next==null){
return header;
}
//初始化
revertNode=header;
indexNode=header.next;
next=indexNode.next;
revertNode.next=null;
//开始反转
while(next!=null){
indexNode.next=revertNode;
revertNode=indexNode;
indexNode=next;
next=next.next;
}
//反转最后一环
indexNode.next=revertNode;
return indexNode;
}
public static Node generateLink(){
Node header=new Node(1);
Node next2=new Node(2);
Node next3=new Node(3);
Node next4=new Node(4);
Node next5=new Node(5);
next4.next=next5;
next3.next=next4;
next2.next=next3;
header.next=next2;
return header;
}
}
网友评论