LintCode - 链表划分(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:容易
要求:

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3返回** 1->2->2->4->3->5->null**

思路
多指针偏移

/**
     * @param head: The first node of linked list.
     * @param x: an integer
     * @return: a ListNode 
     */
    public ListNode partition(ListNode head, int x) {
        if(head == null){
            return null;
        }
        
        ListNode dummy = new ListNode(0);
        ListNode prev = dummy;
        dummy.next = head;
        ListNode target = null;
        ListNode tmp = null;
        while(prev.next != null){
            if(target == null){
                if(x <= prev.next.val){
                    target = prev.next;
                    tmp = prev.next;
                }else{
                    prev = prev.next;
                }
            }else{
                if(tmp.next == null){
                    break;
                }
                if(tmp.next.val < x){
                    prev.next = tmp.next;
                    prev = prev.next;
                    tmp.next = tmp.next.next;
                }else{
                    tmp = tmp.next;
                }
            }
        }
        
        if(target != null){
            prev.next = target;
        }
        return dummy.next;
    }

思路
分2个链表,这样思路比较清晰

public ListNode partition(ListNode head, int x) {
        if (head == null) {
            return null;
        }
        
        ListNode leftDummy = new ListNode(0);
        ListNode rightDummy = new ListNode(0);
        ListNode left = leftDummy;
        ListNode right = rightDummy;
        
        while (head != null) {
            if (head.val < x) {
                left.next = head;
                left = head;
            } else {
                right.next = head;
                right = head;
            }
            head = head.next;
        }
        
        right.next = null;
        left.next = rightDummy.next;
        return leftDummy.next;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...
    mytac阅读 4,738评论 3 3
  • 【声明】欢迎转载,但请保留文章原始出处→_→文章来源:http://www.jianshu.com/p/08d08...
    梦工厂阅读 9,140评论 3 31
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,348评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • 想变成一个漂亮的小姐姐 今天被夸瘦了 好开心 拍的武汉的照片好像大家觉得很好看 天气可真热 好喜欢PGone这种类...
    PearlParis阅读 2,849评论 0 0