反转链表(图解,易懂)
题目要求:
题目链接:点击这里,直接跳转
思路:
方法1:头插法
将链表每个节点依次取下来头插到新链表,即为原链表的反转;因为改变了当前节点的 next
指向,必须先保存 next
地址。
图解如下:
重复以上步骤:直到终止循环
实现代码:
struct ListNode* reverseList(struct ListNode* head){//新链表的头指针struct ListNode* newhead = NULL;//需要头插的结点struct ListNode* cur = head;while(cur){//保存需要头插结点的下一个节点struct ListNode* next = cur->next;//将cur头插到新链表cur->next = newhead;newhead = cur;cur = next;}return newhead;
}
方法2:迭代
假设存在链表 1→2→3→∅,我们想要把它改成 ∅←1←2←3
在遍历列表时,将当前节点的 next
指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用。
图解如下:
实现代码:
struct ListNode* reverseList(struct ListNode* head){struct ListNode* pre = NULL;//需要反转指向的结点struct ListNode* cur = head;while(cur){//保存需要头插结点的下一个节点struct ListNode* next = cur->next;//将cur头插到新链表cur->next = pre;pre = cur;cur = next;}return pre;
}
反转链表(图解,易懂)相关推荐
- 反转链表--清晰易懂的两种方法
反转一个单链表.如下示例:: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL public ...
- 力扣 反转链表(图解)
一: 供以后复习看看 206. 反转链表 难度简单 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2, ...
- 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!
本期例题:LeetCode 206 - Reverse Linked List[1](Easy) 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL ...
- [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
[问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- 剑指offer:面试题24. 反转链表
题目:反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4- ...
- leetcode-92 反转链表II
题目描述如下: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NUL ...
- 反转链表JAVA算法_链表反转算法
1 packagecom.trs.codetool.sort;2 3 /** 4 *@authorzheng.changgang5 * @date 2020-01-02 09:576 * 链表的常见算 ...
- LeetCode实战:反转链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...
- 剑指offer_第15题_反转链表_Python
题目描述 输入一个链表,反转链表后,输出新链表的表头. 理解 怎么反转? 我要找到每个结点 改变每个结点的next 参考阅读: 链表翻转的图文讲解(递归与迭代两种实现) 翻转链表的三种方法 解题思路 ...
最新文章
- Rsync+inotify搭建使用
- 北斗导航 | 坐标变换矩阵(CTM)与欧拉角(Euler)互相转换:Matlab源代码
- python2.7虚拟环境virtualenv安装及使用
- chrome启用flash_如何在Google Chrome中启用Adobe Flash Player
- C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)
- 制作简单的java应用程序_使用exe4j工具制作简单的java应用程序
- 影院要求自费购买3D眼镜是“霸王条款” 官方都开始吐槽了!
- linux下spark的python编辑_Linux下搭建Spark 的 Python 编程环境的方法
- Java Queue 使用总结
- 通达信手机版分时图指标大全_通达信手机版指标源码大全,响应大家要求今日直接附上,快来收藏...
- 关于SWAT模型的一些原理(一)
- 【效率提升】建议抛弃全拼输入,拥抱双拼
- 贪心科技机器学习训练营(十)
- vueX的mutation/action个人学习总结
- 基于双服务器的抗关键词猜测攻击的公钥可搜索加密方案
- vue修改预设preset
- 补码(为什么按位取反再加一)
- 【软切换】WCDMA软切换技术的仿真
- 换脸方法之FaceShifter
- C++ 不高兴的津津