前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-86. 分隔链表

leetcode-86. 分隔链表

作者头像
灰太狼学Java
发布2022-06-17 10:20:07
3090
发布2022-06-17 10:20:07
举报
文章被收录于专栏:Java学习驿站Java学习驿站

JAVA解法

代码语言:javascript
复制
/**
 * 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. 分隔链表

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JAVA解法
  • 题解分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档