LeetCode刷题笔录Partition List
来源:互联网 发布:java 防止 sql注入 编辑:程序博客网 时间:2024/05/29 07:18
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
.
public class Solution {public ListNode partition(ListNode head, int x) {if (head == null || head.next == null)return head;ListNode newHead = new ListNode(-1);ListNode p = newHead;ListNode p1 = head;// append all nodes in the front of the list to the new head if nodes// are less than xwhile (p1 != null && p1.val < x) {p.next = p1;p = p.next;p1 = p1.next;p.next = null;}// already found the first node that is greater than or equal to xListNode part2Head = p1;if (part2Head != null && part2Head.next != null) {ListNode p2 = p1.next;while (p2 != null) {if (p2.val < x) {// append p2 to the lower listp.next = p2;p = p.next;p2 = p2.next;p1.next = p2;p.next = null;continue;} else {// move p1 and p2 forwardp1 = p2;p2 = p2.next;}}}p.next = part2Head;return newHead.next;}}
更新:
上面的解法有很多地方容易出错,其实有个更方便一点的办法,就是有两个dummy head,一个放比x小的元素一个放大于等于x的node,最后把两个list连起来就行了。这样写出错的概率会小很多。
public class Solution { public ListNode partition(ListNode head, int x) { ListNode d1 = new ListNode(-1); ListNode d2 = new ListNode(-1); ListNode pre1 = d1; ListNode pre2 = d2; ListNode p = head; while(p != null){ if(p.val < x){ pre1.next = p; p = p.next; pre1 = pre1.next; pre1.next = null; } else{ pre2.next = p; p = p.next; pre2 = pre2.next; pre2.next = null; } } pre1.next = d2.next; d2.next = null; return d1.next; }}
0 0
- LeetCode刷题笔录Partition List
- LeetCode刷题笔录 Reorder List
- LeetCode刷题笔录 Rotate List
- LeetCode刷题笔录Linked List Cycle
- LeetCode刷题笔录Sort List
- LeetCode刷题笔录Remove Duplicates From Sorted List
- LeetCode刷题笔录Linked List Cycle II
- LeetCode刷题笔录Flatten Binary Tree to Linked List
- LeetCode刷题笔录Reverse Linked List II
- LeetCode刷题笔录Remove Duplicates from Sorted List II
- [leetcode刷题系列]Partition List
- Leetcode刷题笔录 Anagrams
- LeetCode刷题笔录 Permutaions
- LeetCode刷题笔录Combinations
- LeetCode刷题笔录Subsets
- LeetCode刷题笔录Triangle
- LeetCode刷题笔录LRUCache
- leetcode 刷题之路 82 Partition List
- 【字符串匹配】KMP(implement strStr()), 正则匹配(Wildcard Matching),2-dim 动规(regular expression)
- Codeforces Round #259 (Div. 2) (最差的一次比赛。说多了都是泪)
- [算法浅析] 如何在O(1)的时间里删除单链表的结点
- LeetCode刷题笔录Combination Sum
- 关于spring 2.0自定义xml 标记 (一 主要的相关类)
- LeetCode刷题笔录Partition List
- android database 相关
- 东大OJ-Prim算法
- 8月1日 Git Branch Revert 简历应用
- 算法一(复杂度)
- Matlab微分进化算法及优化函数测试
- developer.biao.daily.20140801
- Matlab遗传算法性能测试
- 13.9 Edit Distance