反转链表刷题

简介: 反转链表刷题

今天为大家带来一道题目,来源于牛客网,题目链接反转链表_牛客题霸_牛客网 (nowcoder.com)


3bb9a8f664784fd6a97661783f3b0286.png


思路:使用栈先进后出的思路,做这个题


首先要创建一个栈,把这个链表里面的元素按照顺序放到栈里面,放之前看看头结点是否为空,若为空,返回null


开始入栈,将三个元素都入栈以后,定义一个新的结点等于栈顶元素,把这个元素作为反转后的头结点,然后出栈,直到栈空为止


再把出栈元素放入链表中


完成反转以后令node.next=null,最后返回头结点


这是为了防止形成环


现在上代码


import java.util.*;
public class Solution {
    public ListNode ReverseList(ListNode head) {
        //采用入栈出栈的方式
        //1.首先创建一个栈,并且将元素都放入栈中
        Stack<ListNode> stack=new Stack<>();
        while(head!=null){
            stack.push(head);
            head=head.next;
        }
        if(stack.isEmpty()){
            return null;
        }
        ListNode node=stack.pop();
        //将栈顶元素设为头结点
        ListNode ret=node;
        //出栈
        while(!stack.isEmpty()){
            ListNode tmpNode=stack.pop();
            node.next=tmpNode;
            node=node.next;
        }
        node.next=null;//将头结点下一个元素置为空,防止构成环
        return ret;
    }
}


这就是这个题的讲解,欢迎各位大佬前来斧正!!!🚀🚀🚀👀👀👀

相关文章
|
3月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
40 2
|
3月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
3月前
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
32 0
|
3月前
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
30 0
|
3月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
27 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
3月前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
50 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
40 4
|
3月前
|
存储 Python
【Leetcode刷题Python】23. 合并K个升序链表
合并K个升序链表的方法:使用数组排序的暴力求解法、使用小顶堆的高效方法,以及分而治之的策略,并提供了相应的Python实现代码。
18 1
|
3月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
20 1