单向链表反转-Java实现

这个题目是之前参加面试时遇到的,题目基础要求是:给定指定节点数的单向链表,如何反转整个链表?
这个问题以前也遇到过几次,每次都是写完就忘了,这里记录下实现以备后面思考查看。

1.先自定义Node结构

class Node {
    private int value;
    private Node next;

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

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

    public Node getNext() {
        return next;
    }
}

2.初始化一个指定长度的单向链表

int i = 10;
Node firstNode = null;
Node lastNode = null;
while(i > 0) {
    Node temp = new Node(i);
    if(firstNode == null) {
        firstNode = temp;
    } else {
        lastNode.setNext(temp);
    }
    lastNode = temp;
    i--;
}

3.借助三个变量来实现整个单链表的反转

// Reverse this linked list
Node tailNode = null;
Node headNode = null;
Node tempNode = firstNode;
while(tempNode != null) {
    // Store the next node reference
    tailNode = tempNode.getNext();
    if(headNode == null) {
        // the first node, remove the next reference
        tempNode.setNext(null);
    } else {
        // set now node's next reference to the new head node
        tempNode.setNext(headNode);
    }
    // set the headNode reference to new node
    headNode = tempNode;
    // move the node to deal the next node
    tempNode = tailNode;
}
System.out.println(headNode);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容