单向链表反转

2019-03-01  本文已影响8人  黄靠谱
  1. 利用3个指针:revertNode、indexNode、next,先反转,再往后移动位置,直到链表的末端
  2. 实现一次遍历就可以反转链表,而且不需要额外的空间
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;
        
    }
}
上一篇 下一篇

猜你喜欢

热点阅读