Leetcode Partition List 分割链表

来源:互联网 发布:北京11选5遗漏数据查询 编辑:程序博客网 时间:2024/06/10 04:36


题目:


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.


分析:


对于值大于等于x的节点,直接插到链表。对于值小于x的节点,需要找到第一个大于等于x的节点,插到它的前面。


Java代码实现:


/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode partition(ListNode head, int x) {        if(head==null || head.next==null)            return head;                    ListNode dummy = new ListNode(0);        ListNode node = dummy;        node.next = null;        while(head!=null)        {            if(head.val>=x)            {                while(node.next!=null)                {                    node = node.next;                }                node.next = new ListNode(head.val);                node.next.next = null;            }            else            {                while(node.next!=null && node.next.val < x)                {                    node = node.next;                }                ListNode temp = node.next;                node.next = new ListNode(head.val);                node.next.next = temp;            }            node = dummy;            head = head.next;        }                return dummy.next;    }}


0 0
原创粉丝点击