力扣hot100:反转链表

题目描述:

思路分析:

解决这个问题的关键在于 反转链表的指针方向。我们可以通过一个迭代的方式来反转链表。

  1. 初始化三个指针

    • l: 用于存储反转后的链表头节点,初始值为 null

    • temp: 用于遍历原链表,初始值为 head

    • a: 临时指针,用于保存 temp 的下一个节点,防止链表断裂。

  2. 迭代过程

    • 逐一遍历原链表中的每个节点。

    • 对于每个节点,将其 next 指针指向当前反转链表的头节点 l

    • 更新反转链表的头节点 l 为当前节点。

    • 移动 temp 到下一个节点,继续反转。

  3. 终止条件

    • 遍历直到 tempnull,表示已经遍历完整个链表。
  4. 返回结果

    • 最终返回 l,即反转后的链表的头节点。

代码:

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode l=null;
        ListNode temp=head;
        while(temp!=null){
            ListNode a=temp.next;
            temp.next=l;
            l=temp;
            temp=a;
        }
        return l;
    }
}

总结:

  1. 反转链表的核心思想是通过改变指针的方向来实现链表的反转。

  2. 使用迭代方式,可以在遍历链表的过程中完成反转操作,避免使用额外的空间。

  3. 这种方法的时间复杂度是 O(n),空间复杂度是 O(1),是最优解法。

相关推荐
晓131321 小时前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
iAkuya21 小时前
(leetcode)力扣100 61分割回文串(回溯,动归)
算法·leetcode·职场和发展
梵刹古音21 小时前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头21 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
CoderCodingNo1 天前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
大闲在人1 天前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋1 天前
443. 压缩字符串-python-双指针
算法
Charlie_lll1 天前
力扣解题-移动零
后端·算法·leetcode
chaser&upper1 天前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_499771551 天前
C++中的组合模式
开发语言·c++·算法