• 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 }
  • 相关阅读:
    Activity和Service交互之bindService(回调更新UI)
    Service和Activity交互之广播方式
    自定义动态注册广播和静态注册广播
    Service
    AsyncTask
    播放视频
    播放音乐
    SurfaceView实现拍照预览
    从相册选取图片
    拍照并保存到指定文件夹
  • 原文地址:https://www.cnblogs.com/jiangchen/p/5398166.html
Copyright © 2020-2023  润新知