题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

方式一:使用栈

栈先进后出的规则
1——>2——>3
出栈
3——>2——>1
但是1节点仍然指向着2,形成了2节点与1节点的循环,所以要使最后节点指针指向null

public ListNode ReverseList(ListNode head) {
        if (head == null) 
            return null;   
        // 栈头进尾出,列表尾节点出栈重新指定节点的指向
        Stack<ListNode> stack = new Stack<>();
        ListNode node = head;
        // 节点压栈
        while (node != null) {
            stack.push(node);
            node = node.next;
        }
        // 出栈
        // 第一个节点出栈,头节点
        node = stack.pop();
        // 出栈的节点
        ListNode preNode = node;
        // 出栈节点的后一个节点
        ListNode lastNode = null;
        // 循环出栈,且更新节点
        while (!stack.empty()) {
            lastNode = stack.pop();
            preNode.next = lastNode;
            preNode = lastNode;
            // 防止后一个节点指向前一个节点而最后造成循环
            lastNode.next = null;
        }
        return node;

    }
全部评论

相关推荐

05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务