题目意图:把一个linked list根据某一个给定的值分为小于该值和大于等于该值的两个部分。
思路:1.由于不确定左右两个部分是否有点,两边分别需要建立一个dummy node
2.建立了4个新的node,左右dummy和左右的tail。 注意:dummy是作为一个虚拟的头,用于返回时候用的。
对于左右两边分别建立一个leftTail pointer 和 rightTail pointer 分别记录当前两个list的尾巴。这样每次拿到一个新的点current,判断大小后可以直接加到相应的尾巴处。
3.对于右边部分的最后一个点,尾巴节点的next很可能不为空,所以要对其进行rightTail->next = null 的处理
九章代码:
1 public class Solution { 2 public ListNode partition(ListNode head, int x) { 3 if (head == null) { 4 return null; 5 } 6 7 ListNode leftDummy = new ListNode(0); 8 ListNode rightDummy = new ListNode(0); 9 ListNode left = leftDummy, right = rightDummy; 10 11 while (head != null) { 12 if (head.val < x) { 13 left.next = head; 14 left = head; 15 } else { 16 right.next = head; 17 right = head; 18 } 19 head = head.next; 20 } 21 22 right.next = null; 23 left.next = rightDummy.next; 24 return leftDummy.next; 25 } 26 }