• LeetCode-086-分隔链表


    分隔链表

    题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

    你应当 保留 两个分区中每个节点的初始相对位置。

    示例说明请见LeetCode官网。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/partition-list/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法一:链表遍历

    声明2个链表lessThan和moreThan分别存放小于x的节点和不小于x的节点,然后2个指针curLess和curMore分别指向lessThan和moreThan的头节点,然后遍历链表head:

    • 如果当前节点小于x,则将当前节点添加到lessThan链表中;
    • 如果当前节点不小于x,则将当前节点添加到moreThan链表中。

    链表head遍历完成后,将lessThan和moreThan的尾结点都指向null,避免出现多余的节点,然后将lessThan的尾结点指向moreThan的头结点(即将小于x的节点挪到不小于x的节点的前面),最后返回lessThan的next节点即为最后结果。

    public class LeetCode_086 {
        public static ListNode partition(ListNode head, int x) {
            // 小于x的链表节点
            ListNode lessThan = new ListNode(-1);
            // 不小于x的链表节点
            ListNode moreThan = new ListNode(-1);
            ListNode curLess = lessThan, curMore = moreThan;
            while (head != null) {
                if (head.val < x) {
                    // 小于x的节点添加到链表lessThan中
                    curLess.next = head;
                    curLess = curLess.next;
                } else {
                    // 不小于x的节点添加到链表moreThan中
                    curMore.next = head;
                    curMore = curMore.next;
                }
                head = head.next;
            }
            // 所有节点遍历完成后将lessThan和moreThan尾结点指向null
            curLess.next = null;
            curMore.next = null;
            // 将小于x的节点挪到不小于x的节点的前面
            curLess.next = moreThan.next;
            return lessThan.next;
        }
    
        public static void main(String[] args) {
            ListNode head = new ListNode(1);
            head.next = new ListNode(4);
            head.next.next = new ListNode(3);
            head.next.next.next = new ListNode(2);
            head.next.next.next.next = new ListNode(5);
            head.next.next.next.next.next = new ListNode(2);
    
            ListNode result = partition(head, 3);
            while (result != null) {
                System.out.print(result.val + " ");
                result = result.next;
            }
        }
    }
    

    【每日寄语】 这一生,坎坷太多了,困难也太多了,但人的潜能是无限的,永远不要在困难的时候想这就是自己最困难的时候,只要你咬紧牙根坚持,你的梦想就会成真。

  • 相关阅读:
    产品易用性
    优化Compress components with gzip 问题
    转:稳定性测试
    Xray CA证书
    转:获取WEB各阶段响应时间
    测试用例编写注意事项
    用dd把一个空硬盘写满
    转:linux终端命令使用cpu负载到100
    JMeter命令行执行+生成HTML报告
    防F12扒代码:按下F12关闭当前页面
  • 原文地址:https://www.cnblogs.com/kaesar/p/15187793.html
Copyright © 2020-2023  润新知