反转链表

遍历法:

public class ReverseListNode {

    public ListNode Reverse(ListNode root){

        ListNode Cur = root;

        ListNode Pre = null;

        ListNode headNode =null;

        while (Cur!=null){

            ListNode next=Cur.next;

            if(next==null)

                headNode = Cur;

            Cur.next = Pre;

            Pre = Cur;

            Cur = next;

        }

        return headNode ;

    }

 

    public static void main(String[] args) {

        ListNode root=new ListNode(1);

        root.next=new ListNode(2);

        ListNode R=new ReverseListNode().Reverse(root);

    }

}

class ListNode {

 

    public int val;

    public ListNode next;

 

    public ListNode(int x) {

        val = x;

    }

}

递归实现:

package TEST.反转链表;

/**
 * Created by nick on 2018/10/9.
 */
public class reverseLinkedList {
    static ListNode reverseLinkedList(ListNode node) {
        if (node == null || node.next == null) {
            return node;
        } else {
            ListNode headNode = reverseLinkedList(node.next);
            node.next.next = node;//headNode和node是两个相交的链表
            node.next = null;
            return headNode;
        }
    }

    public static void main(String[] args) {
        ListNode root=new ListNode(1);
        root.next=new ListNode(2);
        root.next.next=new ListNode(3);
        ListNode R=reverseLinkedList(root);
    }

}

原文地址:https://www.cnblogs.com/nickup/p/9761133.html