美文网首页
86. Partition List

86. Partition List

作者: 窝火西决 | 来源:发表于2019-05-31 10:48 被阅读0次

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

    You should preserve the original relative order of the nodes in each of the two partitions.

    Example:

    Input: head = 1->4->3->2->5->2, x = 3
    Output: 1->2->2->4->3->5

    题目

    给定一个链表,一个数x,把这个链表以x分界,左边是小于x的数,右边是大于等于x的数,排完后元素的相对位置不变,只是大小分区了。

    思路

    最直观的想法,新建两个链表,一个存小于x的,一个存大于x的,最后再把两个链表合并。

    代码

     public ListNode partition(ListNode head, int x) {
                /*
                 * Input: head = 1->4->3->2->5->2, x = 3
                   Output: 1->2->2->4->3->5
                 */
             if (head==null||head.next==null) {
                return head;
            }
             ListNode newHeadSmall=new ListNode(-1);
             ListNode newHeadBig=new ListNode(-1);
             ListNode curSmall=newHeadSmall;
             ListNode curBig=newHeadBig;
             
             while (head!=null) {
                if (head.val<x) {//遍历head
                    curSmall.next=head;//小就连到small上
                    curSmall=curSmall.next;
                    head=head.next;
                }else {//大就连到big上
                    curBig.next=head;
                    curBig=curBig.next;
                    head=head.next;
                }
            }
             curBig.next=null;//最后把big结尾指向空
             curSmall.next=newHeadBig.next;//small结尾连接big
             
            return newHeadSmall.next;//返回small
             
            }
    

    相关文章

      网友评论

          本文标题:86. Partition List

          本文链接:https://www.haomeiwen.com/subject/ouzitctx.html