美文网首页
二、链表遍历框架

二、链表遍历框架

作者: 黑夜0411 | 来源:发表于2022-07-17 22:47 被阅读0次

        很多链表题目都可以归结为链表的遍历,以及在遍历中做反转、插入和删除操作,因此可以使用链表遍历的框架来解题。链表遍历的框架代码如下:

    ListNode prev = null;

    ListNode curr = head;

    while (curr != null) {

        // 进行操作,prev 表示前一个结点,curr 表示当前结点

        if (prev == null) {

            // curr 是头结点时的操作

        } else {

            // curr 不是头结点时的操作

        }

        prev = curr;

        curr = curr.next;

    }

        在遍历的过程中,需要一直维护 prev 是 curr 的前一个结点。curr 是循环中的主指针,整个循环的起始和终止条件都是围绕 curr 进行的。prev 指针作为辅助指针,实际上就是记录 curr 的上一个值。在每一轮遍历中,可以根据需要决定是否使用 prev 指针。注意 prev 可能为 null(此时 curr是头结点),在使用前需要先进行判断。

    总结:解决单链表问题时,遵循的步骤是:

            1). 判断问题是否为链表遍历-修改,套用链表遍历框架

            2). 思考单步操作,将代码加入遍历框架

            3). 检查指针丢失等细节

    有很多更复杂的链表题目都以反转链表为基础。下面列出了 LeetCode 上几道相关的题目:

    * LeetCode 203 - Remove Linked List Elements[2] 是一道直白的链表删除题目

    * LeetCode 445 - Add Two Numbers II[3] 以反转链表为基础解题

    * LeetCode 92 - Reverse Linked List II[4] 反转部分链表

    相关文章

      网友评论

          本文标题:二、链表遍历框架

          本文链接:https://www.haomeiwen.com/subject/mpelirtx.html