链表系列题目很经典,因为涉及到两点

  1. 链表
  2. 内存地址

尤其是在当今高级语言越发隐藏底层的今天,链表操作中隐隐包含了对于地址空间到变量名的一种转换映射。当然,这也不可避免地会带来一定的理解复杂度。

题目系列

链表翻转

递归,利用结构的解法上,再添加一种头插法

// 总体思路是通过对新的链表节点进行头插法插入,构造倒序链表
public ListNode reverseList(ListNode head) {
        // 头插法的应用
        // 用于头插法的节点
        ListNode reverse = null;
        // 旧链表头节点
        ListNode curr = head;

        // 旧链表从头到尾正序遍历,新链表使用头插法插入构造倒序
        while(curr != null) {
            ListNode next = curr.next;
            // 旧链表的下一个节点换成新链表的头节点,即将当前节点作为新链表的头节点
            curr.next = reverse;
            // 更新新链表头节点为当前节点
            reverse = curr;
            // 遍历旧链表
            curr = next;
        }
        // 返回新的头节点
        return reverse;
    }

k个一组翻转

Q.E.D.


每一个平凡的日常都是连续的奇迹