• 0086. Partition List (M)


    Partition List (M)

    题目

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

    You should preserve the original relative order of the nodes in each of the two partitions.

    Example:

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

    题意

    给定一个链表和目标值x,将链表中所有值小于x的结点移到所有值大于等于x的结点的前面,同时不能改变值小于/大于等于x的结点的相对位置。

    思路

    新建两个头结点分别用来保存原链表中值小于x的结点和值大于等于x的结点,最后将两链表相连即为所求的新链表。


    代码实现

    Java

    class Solution {
        public ListNode partition(ListNode head, int x) {
            // 建空的头结点便于处理
            ListNode leftHead = new ListNode(0), leftTail = leftHead;
            ListNode rightHead = new ListNode(0), rightTail = rightHead;
    
            while (head != null) {
                if (head.val < x) {
                    leftTail.next = head;
                    leftTail = head;
                } else {
                    rightTail.next = head;
                    rightTail = head;
                }
                head = head.next;
            }
    
            rightTail.next = null;				// 注意断链,否则可能会形成环
            leftTail.next = rightHead.next;		// 拼接链表
    
            return leftHead.next;
        }
    }
    

    JavaScript

    /**
     * @param {ListNode} head
     * @param {number} x
     * @return {ListNode}
     */
    var partition = function (head, x) {
      const dummyA = new ListNode()
      const dummyB = new ListNode()
      let A = dummyA
      let B = dummyB
    
      while (head) {
        const next = head.next
        head.next = null
        if (head.val < x) {
          A.next = head
          A = A.next
        } else {
          B.next = head
          B = B.next
        }
        head = next
      }
    
      A.next = dummyB.next
      return dummyA.next
    }
    
  • 相关阅读:
    基于.Net Core的Redis:实现查询附近的地理信息
    基于.Net Core的Redis:基本数据类型及其应用场景与命令行操作
    C# WebClient几种常用方法的用法
    const学习(续)
    C++ const学习
    Unicode
    android studio下使用HAXM android模拟器(x86)加速器
    使用efinance包获取股票数据
    Linux初识
    UWSGI
  • 原文地址:https://www.cnblogs.com/mapoos/p/14658126.html
Copyright © 2020-2023  润新知