解题思路
86. 分隔链表
我们只需维护两个链表smaller和bigger即可,按顺序分别存储小于x的节点和大于等于x的节点。遍历完原链表后,我们只要将 smaller链表尾节点指向bigger链表的头节点即能完成对链表的分隔。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public static ListNode partition(ListNode head, int x) {
ListNode smaller = new ListNode(0); //小于x的链表
ListNode dummy_smaller = smaller;
ListNode bigger = new ListNode(0); //大于等于x的链表
ListNode dummy_bigger = bigger;
while(head!=null) {
if(head.val<x) {
dummy_smaller.next = head;
dummy_smaller = dummy_smaller.next;
}else {
dummy_bigger.next = head;
dummy_bigger = dummy_bigger.next;
}
head = head.next;
if(head == null) { //链表遍历结束
dummy_bigger.next = null; //大于等于x的链表最后指空
dummy_smaller.next =bigger.next; //对两链表进行合并
}
}
return smaller.next;
}
}