反转单向链表

反转单向链表

http://www.nowcoder.com/questionTerminal/b66a251dec8847f386bbe6cd96b7e9c8

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/**
 * @描述: 反转单向链表
 * @思路: 涉及三个节点, preNode、currode、nextNode
 * 1.声明preNode nextNode;
 * 2.反转preNode、currNode顺序
 * 3.移动指针,更新preNode、currNode
 * @复杂度:时间O(N)
 * @链接:https://www.nowcoder.com/practice/b66a251dec8847f386bbe6cd96b7e9c8?tpId=101&tqId=33175&tPage=1&rp=1&ru=/ta/programmer-code-interview-guide&qru=/ta/programmer-code-interview-guide/question-ranking
 */



public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(input.readLine());
        String[] strings1 = input.readLine().split(" ");
        Node head1 = Node.createNodeList(strings1);
        head1 = ReverseList.reverseList(head1);


        int m = Integer.parseInt(input.readLine());
        String[] strings2 = input.readLine().split(" ");
        DoubleNode head2 = DoubleNode.createNodeList(strings2);
        head2 = ReverseList.reverseDoubleList(head2);

        Node.printNodeList(head1);
        DoubleNode.printNodeList1(head2);

    }


}


class ReverseList {


    public static Node reverseList(Node head) {
        Node node = head;
        Node pre = null;  //初始化preNode
        Node next = null;
        while (node != null) {
            next = node.getNext(); //初始化nextNode

            //反转顺序
            node.setNext(pre);

            //移动
            pre = node; //pre 当前节点
            node = next;
        }
        return pre;
    }


    public static DoubleNode reverseDoubleList(DoubleNode head) {
        DoubleNode node = head;
        DoubleNode pre = null;  //初始化preDoubleNode
        DoubleNode next = null;
        while (node != null) {
            next = node.getNext(); //初始化nextDoubleNode
            //反转顺序
            node.setNext(pre);
            node.setLast(next);

            //移动
            pre = node; //pre 当前节点
            node = next;
        }
        return pre;
    }


}





class Node {

    private Node next;

    private int value;

    public Node(int value) {
        this.value = value;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }


    public static Node createNodeList(Integer[] values) {
        Node head = new Node((values[0]));
        Node node = head;
        for (int i = 1; i < values.length; i++) {
            Node newNode = new Node(values[i]);
            node.next = newNode;
            node = newNode;
        }
        return head;
    }

    public static Node createNodeList(String[] values) {
        Node head = new Node(Integer.parseInt(values[0]));
        Node node = head;
        for (int i = 1; i < values.length; i++) {
            Node newNode = new Node(Integer.parseInt(values[i]));
            node.next = newNode;
            node = newNode;
        }
        return head;
    }


    public static void printNodeList(Node head) {
        StringBuilder sb = new StringBuilder();
        while (head != null) {
            sb.append(head.getValue()).append(" ");
            head = head.getNext();
        }
        System.out.println(sb.toString());
    }

}



class DoubleNode {

    private DoubleNode last;

    private DoubleNode next;

    private int value;

    public DoubleNode(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public DoubleNode getNext() {
        return next;
    }

    public void setNext(DoubleNode next) {
        this.next = next;
    }

    public DoubleNode getLast() {
        return last;
    }

    public void setLast(DoubleNode last) {
        this.last = last;
    }


    public static DoubleNode createNodeList(String[] values) {
        DoubleNode head = new DoubleNode(Integer.parseInt(values[0]));
        DoubleNode node = head;
        DoubleNode pre = null;
        for (int i = 1; i < values.length; i++) {
            DoubleNode newNode = new DoubleNode(Integer.parseInt(values[i]));
            node.next = newNode;
            node.last = pre;
            pre = node;
            node = newNode;
        }
        return head;
    }


    public static DoubleNode createNodeList(Integer[] values) {
        DoubleNode head = new DoubleNode((values[0]));
        DoubleNode node = head;
        DoubleNode pre = null;
        for (int i = 1; i < values.length; i++) {
            DoubleNode newNode = new DoubleNode(values[i]);
            node.next = newNode;
            node.last = pre;
            pre = node;
            node = newNode;
        }
        return head;
    }


    public static void printNodeList1(DoubleNode head) {
        StringBuilder sb = new StringBuilder();
        while (head != null) {
            sb.append(head.getValue()).append(" ");
            head = head.getNext();
        }
        System.out.println(sb.toString());
    }


    public static void printNodeList2(DoubleNode last) {
        StringBuilder sb = new StringBuilder();
        while (last != null) {
            sb.append(last.getValue()).append(" ");
            last = last.getLast();
        }
        System.out.println(sb.toString());
    }


}

全部评论

相关推荐

下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务