zoukankan      html  css  js  c++  java
  • Leetcode: Partition List

    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.
    
    For example,
    Given 1->4->3->2->5->2 and x = 3,
    return 1->2->2->4->3->5.

    Analysis: Linked List 惯用套路,Runner Technique(Two Pointers), 一些技巧就是:设置head的前置假节点prev,两个pointer:current和runner都指到这个prev,然后进行判断总是判断 current.next 或者 runner.next. 这样做按照我多次做类似题的经验来说,是最方便省事不容易出错的。这道题一次过。思路就是current 和 runner 一直移动直到找到 current.next >= x 为止,这里就是后面小于x的元素将要插入的位置,current便停在这里,指示这个位置,runner继续往后面寻找,把每一个小于x的元素都插入到current.next 的位置。

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode partition(ListNode head, int x) {
    14         ListNode prev = new ListNode(-1);
    15         prev.next = head;
    16         ListNode current = prev;
    17         ListNode runner = prev;
    18         while (current.next != null && current.next.val < x) {
    19             current = current.next;
    20             runner = runner.next;
    21         }
    22         while (runner.next != null) {
    23             if (runner.next.val < x) {
    24                 ListNode temp = runner.next;
    25                 runner.next = runner.next.next;
    26                 temp.next = current.next;
    27                 current.next = temp;
    28                 current = current.next;
    29             }
    30             else runner = runner.next;
    31         }
    32         return prev.next;
    33     }
    34 }
     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode partition(ListNode head, int x) {
    14         ListNode dummy = new ListNode(-1);
    15         dummy.next = head;
    16         ListNode cur = dummy;
    17         ListNode runner;
    18         while (cur.next != null && cur.next.val < x) {
    19             cur = cur.next;
    20         }
    21         runner = cur;
    22         while (runner.next != null) {
    23             if (runner.next.val < x) {
    24                 ListNode next = runner.next.next;
    25                 runner.next.next = cur.next;
    26                 cur.next = runner.next;
    27                 cur = cur.next;
    28                 runner.next = next;
    29             }
    30             else runner = runner.next;
    31         }
    32         return dummy.next;
    33     }
    34 }
  • 相关阅读:
    人脸识别总结(附开源项目代码与各大数据集下载路径)
    simpledet 的配置
    论文笔记--PCN:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks
    smallcorgi/Faster-RCNN_TF训练自己的数据
    保存文件名至txt文件中,不含后缀
    训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
    调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题
    python字符串前缀和格式化
    摩斯电码与字母相互转换
    django配置mysql
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/3807137.html
Copyright © 2011-2022 走看看