首页 > 代码库 > [Leetcode] Partition List
[Leetcode] Partition List
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:
- 从左往右扫描,找到第一个大于X的指针,然后再该指针左边,不断插入小于X的元素。这里为了避免处理head是否为空的检测,在头指针位置先插入一个干扰元素,以保证head永不为空,然后在最后返回的时候删除掉。
- 用small来指向比x小的值的最后一个,用big来指向大于或等于x的值的最后一个,即下一个应该插入的位置。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * }10 * }11 */12 public class Solution {13 public ListNode partition(ListNode head, int x) {14 ListNode root=new ListNode(-1);15 root.next=head;16 ListNode small=root;17 ListNode big=root;18 ListNode pointer=root;19 while(pointer.next!=null){ //在这里找第一个比x大或等的数20 if(pointer.next.val>=x){21 small=pointer;22 big=pointer.next;23 pointer=pointer.next;24 break;25 }26 pointer=pointer.next;27 }28 while(pointer.next!=null){29 if(pointer.next.val>=x){30 pointer=pointer.next;31 big=big.next;32 }else{33 pointer=pointer.next;34 ListNode temp=pointer.next;35 pointer.next=small.next;36 small.next=pointer;37 big.next=temp;38 pointer=big;39 small=small.next;40 }41 }42 return root.next;43 }44 }
[Leetcode] Partition List
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。