Java实现链表反转

来源:互联网 发布:nginx 子域名映射 编辑:程序博客网 时间:2024/06/04 18:01

用两种方法实现。

public class ReverseLinkTest {        public static void main(String[] args) {        // TODO Auto-generated method stub        Link link = new Link();        Node head = link.createLink();        link.print(head);        link.print(link.reverseLink(head));    }}class Node{    private int data;    private Node next;    public Node(){}    public Node(int data, Node next){        this.data = data;        this.next = next;    }    public int getData() {        return data;    }    public void setData(int data) {        this.data = data;    }    public Node getNext() {        return next;    }    public void setNext(Node next) {        this.next = next;    }    }class Link{    private final static int length = 5;    Node linkHead = new Node(0 , null);    public Node createLink(){        for(int i = length ; i > 0 ; i--){            Node n = new Node(i , null);            n.setNext(linkHead.getNext());            linkHead.setNext(n);        }        return linkHead;    }    public void print(Node linkHead){        while(linkHead != null){            System.out.print(linkHead.getData() + " ");            linkHead = linkHead.getNext();        }        System.out.println();    }    public Node reverseLink(Node linkHead){                if(linkHead == null || linkHead.getNext() == null){            return linkHead;        }        Node reverseLink = null, p = null;        reverseLink = linkHead;        linkHead = linkHead.getNext();        reverseLink.setNext(null);        p = linkHead.getNext();        while(linkHead != null){            linkHead.setNext(reverseLink);            reverseLink = linkHead;            linkHead = p;            if(p != null){                p = p.getNext();            }                    }        return reverseLink;    }    public Node reverseLink2(Node linkHead){        if(linkHead == null || linkHead.getNext() == null){            return linkHead;        }        Node reverseLink = null, p = null;        reverseLink = linkHead.getNext();                while(reverseLink.getNext() != null){            p = reverseLink.getNext();            reverseLink.setNext(p.getNext());            p.setNext(linkHead.getNext());            linkHead.setNext(p);        }        reverseLink.setNext(linkHead);        reverseLink = linkHead.getNext();        linkHead.setNext(null);        return reverseLink;    }}