LeetCode系列:(86) 链表分割 Java版

题目链接:https://leetcode.com/problems/partition-list/

说明

1:环境 windows10
2:编辑器 IDEA
3:时间:2019-6-15
4:LeetCode 86 题:链表分割

题目要求

给定链表和值x,对其进行分区,使得小于x的所有节点都在大于或等于x的节点之前。
您应该保留两个分区中每个分区中节点的原始相对顺序。

Example:  
Input: head = 1->4->3->2->5->2, x = 3  
Output: 1->2->2->4->3->5  

解题思路

1:创建两个临时头结点,我这里命名为 less_head 和 more_head,再创建两个节点,less_ptr和more_ptr,分别指向less_head和more_head,用于在链表上移动
2:遍历链表,使用判断条件,如何链表中数据域数值小于x,则把该节点链接到less_head的后面,同理如果大于或等于,则链接到more_head后面
3:就是一些,节点的移动,比如说,(1)原链表的head 要指向head的下一个节点,(2)less_ptr 和 more_ptr指向链接后的节点。

图片解释

在这里插入图片描述

代码

public ListNode partition(ListNode head, int x) {
        ListNode less_head = new ListNode(0);    // 创建一个less_head 节点
        ListNode more_head = new ListNode(0);    // 创建一个more_head 节点
        ListNode less_ptr = less_head;    // less_ptr 节点指向 less_head
        ListNode more_ptr = more_head;    // 同理
        while (head != null){// 遍历原链表
            if (head.val < x){ // 判断 原链表的值与x值得大小
                less_ptr.next = head;//将 节点链接在less_ptr 后面
                less_ptr = head;// less_ptr指向链接后的节点
            }
            else {
                more_ptr.next = head;
                more_ptr = head;
            }
            head = head.next; // head向后移动
        }
        // 将 分段后的连表串联起来
        less_ptr.next = more_head.next;
        more_ptr.next = null; // 最后一个节点的next至为空
        return less_head.next;
    }
发布了30 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41288824/article/details/92091179