【leetcode】206.反转链表

简介: 【leetcode】206.反转链表

17.png


解法一

在遍历链表时,定义一个链表的前驱结点 prev ,然后一边遍历一边把 cur(此节点)的 next 指向 prev ,直到链表遍历完。


需要注意的是,cur 的 next 指向 prev 之后就不能达到从前往后遍历的效果了,所以我们需要提前记录 cur 的 next ,并且 prev 应随着 cur 一起往后走,并且一直是 cur 的前驱结点


public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode prev = null;     // 定义前驱结点
        while (cur != null) {
            ListNode next = cur.next;    // 提前记录 cur.next
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        return prev;
    }

解法二

使用递归思路完成

可以把整条链表看成是 head(头结点)+ 剩余节点,就可以先将剩余结点反转,再将头结点尾插到最后。


public ListNode reverseList(ListNode head) {
        if (head == null) {
            return null;
        }
        if (head.next == null) {
            return head;
        }
        ListNode secondNode = head.next;    // 现在的第二个节点,就是反转后的最后一个节点
        ListNode reverseHead = reverseList(secondNode);     // 反转后的头结点
        head.next = null;
        secondNode.next = head;
        return reverseHead;
    }
目录
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
136 1
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
163 0
Leetcode第21题(合并两个有序链表)
|
6月前
|
算法 Go
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
204 10
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
131 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
161 0
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
存储 算法
LeetCode第86题分隔链表
文章介绍了LeetCode第86题"分隔链表"的解法,通过创建两个新链表分别存储小于和大于等于给定值x的节点,然后合并这两个链表来解决问题,提供了一种简单易懂且操作原链表的解决方案。
LeetCode第86题分隔链表
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
LeetCode第23题合并 K 个升序链表
这篇文章介绍了LeetCode第23题"合并K个升序链表"的解题方法,使用分而治之的思想,通过递归合并链表的方式解决了这个难题。
LeetCode第23题合并 K 个升序链表
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
246 0