Partition List

来源:互联网 发布:iphone手机阅读软件 编辑:程序博客网 时间:2024/06/05 23:53

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.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode partition(ListNode head, int x) {        ListNode beforeHead=null,beforeTail=null;        ListNode afterHead=null,afterTail=null;        ListNode node=head;        while(node!=null){            ListNode next=node.next;            node.next=null;            if(node.val<x){                if(beforeHead==null){                    beforeHead=node;                    beforeTail=node;                }                else{                    beforeTail.next=node;                    beforeTail=beforeTail.next;                }            }            else {                if(afterHead==null){                    afterHead=node;                    afterTail=node;                }                else{                    afterTail.next=node;                    afterTail=afterTail.next;                }            }            node=next;        }        if(beforeHead==null){            return afterHead;        }        beforeTail.next=afterHead;        return beforeHead;    }}

0 0
原创粉丝点击