链表面试题------ Java逆置链表

题目:逆置链表

思路:

1.result ------->  结果链表
	cur -------->用来遍历原链表的
1.遍历整个链表 取出节点 cur
2. 把 取出来的 节点 cur 头插到 结果链表 result 上

代码:

1.定义节点代码

public class Node {
    int val;
    Node next = null;

    Node(int val){
        this.val = val;
    }

    //打印链表
    @Override
    public String toString() {
        return String.format("Node(%d)",val);
    }
}

逆置链表代码:

public class Practice2 {
    public static Node reverse(Node head){
        //遍历链表
        Node cur = head;
        //结果链表
        Node result = null;
        while(cur != null){
            //因为后面改变了 cur.next 所指向的元素,
            // 所以需要提前记录 cur 的 下一个元素
            Node next = cur.next;
            //把 cur 头插 到 result 上
            cur.next = result;
            result = cur;
            cur = next;
        }
        return result;
    }

    //测试方法   创建一个链表
    private static Node test(){
        Node n1 = new Node(1);
        Node n2 = new Node(2);
        Node n3 = new Node(3);
        Node n4 = new Node(4);
        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        return n1;
    }

    public static void main(String[] args) {
        Node head = reverse(test());
        for(Node cur = head;cur != null;cur = cur.next){
            System.out.println(cur);
        }
    }
}

运行结果:

链表面试题------ Java逆置链表_第1张图片

你可能感兴趣的:(leetcode刷题)