Partition List - Leetcode
2015-02-19 04:50
274 查看
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode partition(ListNode head, int x) { ListNode left=new ListNode(-1), right=new ListNode(-1); ListNode cur = head, left_head = null, right_head = null; while(cur!=null){ if(cur.val < x){ left.next = cur; cur = cur.next; left = left.next; left.next = null; if(left_head == null) left_head = left; }else{ right.next = cur; cur = cur.next; right = right.next; right.next = null; if(right_head == null) right_head=right; } } if(right_head!=null){ left.next = right_head; left = left.next; if(left_head == null) //只有右边 left_head = left; } return left_head; } }
分析:就一个链表分区,
第一个想到,分别从链表两端看往中间走,左边指针放比pivot小的,右边指针放比pivot大的。
1)如果左边遇到大的,右边遇到小的:左右调换;
2)如果左边遇到大的,右边遇到大的:左边插入右边;
3)如果左边遇到小的,右边遇到小的:右边插入左边;
直到左指针遇到右指针。
因为是链表结构,交换/插入的实现都是很繁琐。舍弃!
第二个想法是链表从左往右走,当遇到小的放到左指针后面,当遇到大的放到右指针后面。最后将左指针连接右指针。
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->2and x = 3,
return
1->2->2->4->3->5.
相关文章推荐
- LeetCode力扣之Partition List
- LeetCode Partition List
- Partition List -- LeetCode
- partition-list-leetcode-C++
- [LeetCode 86] Partition List Solution
- (java)leetcode-86:Partition List
- Leetcode Partition List
- C实现 LeetCode->Partition List(双指针大法)(单链表)
- Partition List--LeetCode
- leetcode:Partition List 【Java】
- LeetCode--partition-list
- 闲话链表(三) leetcode之Partition List
- LeetCode之Partition List
- leetcode之Partition List,Reverse Nodes in k-Group
- leetcode之Partition List
- Leetcode之Partition List 问题
- [Leetcode] Partition List **
- LeetCode刷题笔记(链表):partition-list
- LeetCode2.2.3(Partition List)
- LeetCode Partition List(链表分段)