侧边栏壁纸
博主头像
阿里灰太狼博主等级

You have to believe in yourself . That's the secret of success.

  • 累计撰写 104 篇文章
  • 累计创建 50 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

leetcode-86. 分隔链表

阿里灰太狼
2022-04-28 / 0 评论 / 2 点赞 / 187 阅读 / 1,065 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

86. 分隔链表0
86. 分隔链表1

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 partition(ListNode head, int x) {
        // 分别定义储存比特定值大和比特定值小的两个链表
        ListNode large = new ListNode(0);
        ListNode small = new ListNode(0);
        // 为两个新建的链表分别设置哑节点,即它们的 next 指针指向各自链表的头节点,这样做的目的是为了更方便地处理头节点为空的边界条件
        ListNode smallHead = small;
        ListNode largeHead = large;
        // 当传进来的链表头节点不为空则进入循环,遍历整个链表
        while (head != null) {
            // 当头节点的值小于特定值时,将其拼接到 small 链表中;当头节点的值大于或等于特定值时,将其拼接到 large 链表中
            if (head.val < x) {
                small.next = head;
                small = small.next;
            } else {
                large.next = head;
                large = large.next;
            }
            head = head.next;
        }
        // 当传进来的链表头节点为空,则说明遍历结束,将储存比特定值大的链表的末尾指针指向 null
        large.next = null;
        // 将储存比特定值小的链表的末尾指针指向储存比特定值大的链表的头节点
        small.next = largeHead.next;
        // 返回储存比特定值小的链表的头节点即为所求
        return smallHead.next;
    }
}

题解分析

  这道题的思路是原链表拆成两个新的链表再合起来,一个储存比特定值小的,一个储存比特定值大的。首先定义两个的链表 small 和 large,同时再定义两个哑结点,用于更方便地处理头节点为空的边界条件。当传进来的链表头节点不为空则进入循环,遍历整个链表,判断每一个值与特定值的关系,当头节点的值小于特定值时,将其拼接到 small 链表中;当头节点的值大于或等于特定值时,将其拼接到 large 链表中,直到遍历完整个链表,将上边定义的两个链表连起来即为所求。

leetcode原题:86. 分隔链表

2

评论区