【 腾讯精选练习 50 题】01—翻转链表

简介: 【 腾讯精选练习 50 题】01—翻转链表

题目简介

反转一个单链表

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

题目解析

  1. 常规面试题目,两种方法都要会,迭代、递归
  2. 对于迭代来说:在遍历链表时,将当前节点的 next 指针改为指向前一个节点
  3. 对于递归来说:遍历到结尾,然后利用递归完的进行返回即可

题目代码

public class Study01 {
    // 递归
    public ListNode reverseListRecursion(ListNode head) {
        // 防止head为空或者一个的情况
        if(head == null || head.next == null){
            return head;
        }
        ListNode newNode = reverseListRecursion(head.next);
        // 将当前head的next.next指向当前元素
        head.next.next = head;
        head.next = null;
        return newNode;
    }
    // 迭代
    public ListNode reverseListIteration(ListNode head) {
        if(head == null){
            return null;
        }
        ListNode p1 = null;
        ListNode p2 = head;
        ListNode p3 = null;
        while(p2 != null){
            // 让p3去占领下一个位置
            p3 = p2.next;
            p2.next = p1;
            p1 = p2;
            p2 = p3;
        }
        return p1;
    }
}


相关文章
|
3月前
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
32 0
|
5月前
|
存储 人工智能 测试技术
每日练习之排序——链表的合并;完全背包—— 兑换零钱
每日练习之排序——链表的合并;完全背包—— 兑换零钱
33 2
|
5月前
|
算法 Java C语言
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
35 1
|
5月前
|
存储
2.顺序表_链表(附练习)
2.顺序表_链表(附练习)
|
6月前
|
算法
25. K 个一组翻转链表
25. K 个一组翻转链表
59 9
|
5月前
25. K个一组翻转链表
25. K个一组翻转链表
|
5月前
|
算法 数据挖掘 Python
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
|
5月前
|
算法
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
35 0
|
6月前
教你三指针拿捏链表翻转
教你三指针拿捏链表翻转
|
6月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解