概述:
左耳朵耗子專欄《左耳聽風》 用戶自發每週完成一個ARTS:
1.Algorithm:每週至少做一個 leetcode 的算法題
2.Review:閱讀並點評至少一篇英文技術文章
3.Tip:學習至少一個技術技巧
4.Share:分享一篇有觀點和思考的技術文章
Algorithm
題目概述:
給出一個鏈表和一個值x,以x爲參照將鏈表劃分成兩部分,使所有小於x的節點都位於大於或等於x的節點之前。 兩個部分之內的節點之間要保持的原始相對順序。 例如: 給出1->4->3->2->5->2和x = 3, 返回1->2->2->4->3->5
代碼思路
public class LinkedListSortDemo {
static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode partition(ListNode head, int x) {
if(head==null)
return null;
ListNode dummy1=new ListNode(0);
ListNode dummy2=new ListNode(0);
ListNode curr1=dummy1;
ListNode curr2=dummy2;
while(head!=null){
if(head.val<x){
curr1.next=head;
curr1=curr1.next;
}else{
curr2.next=head;
curr2=curr2.next;
}
head=head.next;
}
curr2.next=null;
curr1.next=dummy2.next;
return dummy1.next;
}
public static void main(String[] args) {
LinkedListSortDemo l = new LinkedListSortDemo();
ListNode listNode=new ListNode(1);
ListNode temp=listNode;
temp.next=new ListNode(4);
temp=temp.next;
temp.next=new ListNode(3);
temp=temp.next;
temp.next=new ListNode(2);
temp=temp.next;
temp.next=new ListNode(5);
temp=temp.next;
temp.next=new ListNode(2);
temp=temp.next;
ListNode result = l.partition(listNode,3);
System.out.println("---");
}
}