86. Partition List

0人阅读 评论(0) 收藏 举报
分类:

86. Partition List

题目

给出一个链表和一个键值x,将小于x的所有结点排在大于等于x的结点之前。你应该保持这两部分的原始相对顺序不变。
比如:
给出 1->4->3->2->5->2 and x = 3,
返回 1->2->2->4->3->5.

代码块

/**
 * 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) {
        if(head == null) return null;
        ListNode dummyLeft = new ListNode(0);
        ListNode left = dummyLeft; //left已经被初始化。
        ListNode dummyRight = new ListNode(0);
        ListNode right = dummyRight;
        while(head != null){
            if(head.val < x){
                left.next = new ListNode(head.val);//新建一个结点,将满足要求的放进去。
                left = left.next;
            }else{
                right.next = new ListNode(head.val);
                right = right.next;
            }
            head = head.next;//忘记
        }
        left.next = dummyRight.next;
        return dummyLeft.next;
    }
}

代码分析

解题思路:
本题思路很明确,先将比x小的排在一起,然后将大于等于x的排在一起,再将大于等于x的放到小于x的后面就可以。

出现的问题:
本题在默写时,遇到的失误:将left.next = new ListNode(head.val),写错成“dummyleft = head”,出现这个问题是因为第一没有好好理解dummy的含义,dummy是哑变量,是静态的,设置后就不要变了。第二,之前的代码只涉及了left,所以,是需要将新的结点放在left后时,需要new一个新的结点。

因为涉及到头结点的移动, 所以要设置dummy变量作为头结点的前驱结点。比如head=dummy;就像是拉拉链,对齐的过程。
这是链表中经常会遇到的问题:链表的第一个结点(node),没有前驱结点,防止该node需特殊处理,会导致额外的代码量。如果创建一个dummy,将其作为第一个node的前驱结点,这样链表中所有node都可以用同样的逻辑来处理了。

查看评论

【leetcode】【86】Partition List

一、问题描述 Given a linked list and a value x, partition it such that all nodes less than x come bef...
  • xiaoliucool1314
  • xiaoliucool1314
  • 2016年03月03日 11:16
  • 715

LeetCode 86(Partition List)java

原题:Given a linked list and a value x, partition it such that all nodes less than x come before n...
  • Jassy1994
  • Jassy1994
  • 2016年11月24日 16:02
  • 508

【LEETCODE】86- Partition List [Python]

Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr...
  • aliceyangxi1987
  • aliceyangxi1987
  • 2016年02月26日 10:46
  • 1157

LeetCode 86 Partition List (Python详解及实现)

【题目】 Given a linked list and a value x,partition it such that all nodes less than x come before nod...
  • yangjingjing9
  • yangjingjing9
  • 2017年08月09日 17:15
  • 167

86. Partition List(list)

题目: Given a linked list and a value x, partition it such that all nodes less than x come before n...
  • u011539372
  • u011539372
  • 2016年08月24日 21:33
  • 74

leetcode_86_Partition List

思路: 刚开始试着把所有小于x的结点依次插到前面去,但是因为第一个和最后结点的问题真的把我搞得焦头烂额,后来想想,用我媳妇想到的方法可能更清晰一点,用两个链表分别连接小于和大于等于x 的结点,然后再...
  • dfb198998
  • dfb198998
  • 2015年02月05日 21:57
  • 1141

LeetCode 86. Partition List

用两条链表维护两个partion, 最后把它们hebing
  • u014674776
  • u014674776
  • 2014年07月23日 04:54
  • 562

86. Partition List

分析:只要把比x小的节点按顺序连成一条链,比x大或等于x的节点连成另一条链,然后把两条链连起来。注意一下边界情况(某条链为空)。另外,需要调整一下做题目的心态,遇到一些蛋疼或者看着麻烦的题目,一定不要...
  • wusecaiyun
  • wusecaiyun
  • 2015年08月05日 13:32
  • 199

Leetcode——86. Partition List

题目Given a linked list and a value x, partition it such that all nodes less than x come before nodes ...
  • starstar1992
  • starstar1992
  • 2017年01月26日 19:25
  • 135

Leetcode ☞ 86. Partition List ☆

给一个链表和一个值。将链表中小于该值的节点放在前面,大于等于放在后。保持原先的相对顺序...
  • Dr_Unknown
  • Dr_Unknown
  • 2016年03月06日 16:40
  • 207
    个人资料
    持之以恒
    等级:
    访问量: 1767
    积分: 340
    排名: 22万+
    文章分类
    文章存档
    最新评论