Partition List解题报告

题目意图:把一个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 }

 

posted @ 2016-04-16 12:59  毛线刷题笔记  阅读(493)  评论(0编辑  收藏  举报