86. Partition List

Description

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.

Solution

Two-pointers

比较简单的做法是把节点移动到两个新链表中,最后把两个新链表拼起来。注意不要形成环。


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode smallHead = new ListNode(0);
        ListNode largeHead = new ListNode(0);
        ListNode smallTail = smallHead;
        ListNode largeTail = largeHead;

        while (head != null) {
            if (head.val < x) {
                smallTail.next = head;
                smallTail = smallTail.next;
            } else {
                largeTail.next = head;
                largeTail = largeTail.next;
            }
            head = head.next;
        }

        smallTail.next = largeHead.next;
        largeTail.next = null;  // in case there's a loop
        return smallHead.next;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 重新整理了一下以前写过的小Demo,收录了部分整合在来一起 效果图: 源代码:https://github.com...
    ShenYj阅读 1,904评论 0 1
  • 今天是大寒也是小年温度在寒风的吹拂下迅速降低到零下一早赶去公司做收尾工作为公司收垃圾多年的老许特地买了苹果和核桃说...
    哈哈同学阅读 1,124评论 0 0
  • 首先将PC和UR3用网线连接并把ip分别设置为192.168.1.1和192.168.1.2。安装ur_morde...
    王啟凡阅读 5,434评论 0 0