题解 | #反转链表#

反转链表

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

import java.util.*;
import java.util.Stack;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode ReverseList (ListNode head) {
        // write code here
        Stack<ListNode> stack = new Stack<>(); //生成栈stack
        ListNode copyhead = head;              //思考一下head.next的值,可能你就错在这里了。
        //把链表节点全部摘掉放到栈中
        while (copyhead != null){
            stack.push(copyhead);                   //push()放入栈
            copyhead = copyhead.next;                   //head指向下一个结点
        }
        
        if(stack.isEmpty()){                    //isEmpty()判断栈是否为空
            return null;
        }
        ListNode node = stack.pop();            //第一次pop()出栈,即头结点
        ListNode newhead = node;                //新的头节点诞生
        //栈中的结点全部出栈
        while (!stack.isEmpty()){
            node.next = stack.pop();             //从头结点的下一个结点开始,循环出栈
            node = node.next;                    //node指向下一个结点
        }
        /*最后一个结点就是反转前的头结点,
        由于刚开始的头结点head存放的下一个结点地址不为空,
        且指向的一定是head.next或null(只有一个头结点);
        这就是为什么我会多一步ListNode copyhead = head; 
        一定要让它的next等于空,否则会构成环*/
        node.next = null;
        return newhead;
    }
}

#算法初学者##java##数据结构##反转列表#
全部评论

相关推荐

05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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