单链表反转

单链表反转的一种Java实现如下:

public class LinkedList<T extends Comparable<T>> {

    private LinkedNode<T> head;
    private LinkedNode<T> tail;

    public LinkedList() {
    }

    public void add(T t) {
        if (t == null) {
            return;
        }
        LinkedNode n = new LinkedNode(t, null);
        if (tail == null) {
            tail = n;
            head = tail;
        } else {
            tail.next = n;
            tail = n;
        }
    }

    /**
     * 单链表反转
     */
    public void reverse() {
        if (head == null || head.next == null) {
            return;
        }

        LinkedNode<T> newHead = null;
        LinkedNode<T> newTail = null;

        LinkedNode<T> p = head;
        LinkedNode<T> q = p.next;

        while (p != null) {
            p.next = newHead;
            newHead = p;
            if (newTail == null) {
                newTail = newHead;
            }
            if (q == null) {
                break;
            }
            p = q;
            q = q.next;
        }

        head = newHead;
        tail = newTail;
    }

    

}

class LinkedNode<T extends Comparable<T>> {
    public T value;
    public LinkedNode next;

    public LinkedNode() {
    }

    public LinkedNode(T value, LinkedNode next) {
        this.value = value;
        this.next = next;
    }
}

posted @ 2017-08-13 21:09  Mike-Shen  阅读(111)  评论(0)    收藏  举报